Các phương thức của ParticleSystem mô phỏng lửa

Một phần của tài liệu Mô phỏng tính trong suốt của lửa theo nhiệt độ trong thực tại ảo (Trang 46 - 51)

Một particle system luôn có một phương thức để khởi tạo cho từng hạt và cho cả particle system. Nhìn chung thì phương thức khởi tạo cho particle system mô phỏng lửa cũng tương tự như bất cứ một particle system nào khác. Nhiệm vụ của nó chỉ là truyền các thông số cần thiết cho particle system hoạt động. Các tham số này phải được tính toán và lựa chọn cẩn thận để mang lại

hiệu quả mô phỏng tốt nhất. Như đã trình bày ở trên, các thông số truyền vào cho từng hạt đều được gán ngẫu nhiên quanh một giá trị trung bình và khoảng biến thiên cố định.

2.2.4.1. Phương thức khởi tạo một hạt

InitialParticle(particle){

_position = MeanInitialPosition + varPosition*Random(MinP,MaxP);

_velocity = MeanInitialVelocity + varVelocity*Random(MinV,MaxV);

_size = MeanInitialSize + varSize*Random(MinS,MaxS);

_lifeTime = MeanInitialLifeTime + varTime*Random(MinT,MaxT);

_alpha = MeanInitialAlpha + varAlpha*Random(MinA,MaxA);

}

Trong đó:

MeanInitialPosition: Vị trí khởi tạo trung bình

varPosition: Khoảng biến thiên của vị trí khởi tạo

MeanInitialVelocity: Vận tốc khởi tạo trung bình

varVelocity: Khoảng biến thiên của vận tốc khởi tạo

MeanInitialSize: Kích thước khởi tạo trung bình

varSize: Khoảng biến thiên của kích thước khởi tạo

MeanInitialLifeTime: Thời gian sống khởi tạo trung bình

varTime: Khoảng biến thiên của thời gian sống khởi tạo

MeanInitialAlpha: Độ trong suốt khởi tạo của particle trung bình

varAlpha: Khoảng biến thiên của độ trong suốt khởi tạo

Random(): Hàm chọn ngẫu nhiên giá trị trong một khoảng

MinX: Giá trị nhỏ nhất trong một khoảng

2.2.4.2. Phương thức khởi tạo cho particle system

InitialParticleSystem(){

For each particle in fireParticle Initialize (particle)

camera = cameraPosition; viewport = viewportPosition; }

Trong phương thức này, ta khởi tạo các tham số cho khung nhìn, và quan trọng nhất là khởi tạo cho tập các hạt của particle system. Số lượng hạt được khởi tạo sẽ quyết định mật độ hạt lửa.

Cốt lõi của particle system là phương thức điều khiển hoạt động của một hạt. Trong mô phỏng lửa, phương thức này sẽ quyết định hình dáng, màu sắc và chuyển động chung của ngọn lửa.

Trong môi trường không trọng lượng, ngọn lửa sẽ có dạng hình cầu.Tuy nhiên, khi ở trên mặt đất dưới tác dụng của trọng lực và hiện tượng đối lưu khí quyển, ngọn lửa xuất phát từ một điểm hay một vùng nhỏ sẽ có xu hướng bốc lên cao và bóp vào như ta thường thấy ở hình ảnh ngọn nến.

Để mô phỏng hình dạng của ngọn lửa, vector vận tốc của hạt lửa sẽ được thay đổi hướng liên tục để quỹ đạo hạt lửa tạo có hình dạng vòng cung. (adsbygoogle = window.adsbygoogle || []).push({});

Hình 2.18. Sự thay đổi hướng của vecto vận tốc

Phương trình sau cho phép thay đổi hướng vận tốc cho hạt lửa ở dạng đơn giản:

_velocity.x() -= deltaX;

_velocity.Z() -= deltaZ;

Sau một khoảng thời gian nhất định, thành phần theo trục Ox và Oz sẽ bị trừ đi một lượng deltaX và deltaZ tương ứng. Lượng trừ đi sẽ được tính toán sao cho khi hết thời gian sống, vector chiếu của vector vận tốc lên mặt phẳng Oxz sẽ cùng phương khác hướng với hình chiếu cũng lên mặt Oxz của vecto vận tốc khởi tạo.

Phương thức cập nhật trạng thái cho hạt là một thủ tục được gọi đi gọi lại trong suốt quá trình hoạt động của particle system. Một khi hạt hết thời gian sống, nó được khởi tạo lại để trở thành một hạt mới, duy trì sự liên tục của ngọn lửa.

2.2.4.3. Phương thức cập nhật trạng thái cho hạt cụ thể như sau:

Update() {

foreach particle in fireParticle

_position += _velocity; _size *= sizeChangeRate; _alpha *= alphaChangeRate; _velocity.x() -= deltaX; _velocity.Z() -= deltaZ; _lifeTime -= deltaTime; if(_lifeTime <= 0) Initialize (particle) } Trong đó:

sizeChangeRate: Hàm chọn ngẫu nhiên giá trị trong một khoảng

Với ý tưởng ban đầu là xây dựng một bộ công cụ hỗ trợ cho việc thiết kế bài giảng điện tử trong giáo dục đào tạo và các hiệu ứng trong xử lý phim có sử dụng công nghệ thực tại ảo. Việc mô phỏng lại các thí nghiệm cũng như xây dựng nên các hiệu ứng là công việc khá khó khăn và tốn kém thời gian, vì thế trong khuôn khổ báo cáo này, chương trình thử nghiệm được cài đặt các thuật toán thể hiện nguyên tắc hoạt động của kỹ thuật Particle trong sinh ảnh ba chiều, mô phỏng các hiệu ứng đồ họa được xử lý bằng kỹ thuật Particle, bao gồm:

- Vị trí (_position)

- Vận tốc (_velocity)

- Kích thước (_size)

- Thời gian sống (_lifeTime)

- Độ trong suốt (_alpha)

Một phần của tài liệu Mô phỏng tính trong suốt của lửa theo nhiệt độ trong thực tại ảo (Trang 46 - 51)