Thông tin tài liệu:
VẬT THỂ, ĐIỂM CHÈN VÀ CÁC HIỆU ỨNGParticle được sử dụng ở mọi nơi trong game để tạo ra những hiệu ứng khó quên. Từ những quả rocket tìm kiếm mục tiêu cho đến những vụ nổ mà nó tạo ra, particle làm cho thế giới ảo trong game trở lên hấp dẫn hơn. Những gì bạn sẽ được học trong chương này: Particle là gì và được dùng thế nào Particle bao gồm những thuộc tính gì Làm thế nào để định nghĩa và render các particle Particle emitter là gì và ứng dụng của nó Cách render...
Nội dung trích xuất từ tài liệu:
Beginning DirectX9 - Chương 8 Dịch bởi TransTeam diễn đàn Gamedev.VNBeginning DirectX9 CHƯƠNG 8VẬT THỂ, ĐIỂM CHÈN VÀCÁC HIỆU ỨNGP article được sử dụng ở mọi nơi trong game để tạo ra những hiệu ứng khó quên. Từ những quả rocket tìm kiếm mục tiêu cho đến những vụ nổ mà nó tạo ra, particle làm cho thế giới ảo trong game trở lên hấp dẫn hơn.Những gì bạn sẽ được học trong chương này: Particle là gì và được dùng thế nào Particle bao gồm những thuộc tính gì Làm thế nào để định nghĩa và render các particle Particle emitter là gì và ứng dụng của nó Cách render các particle bằng Direct3D’s point sprite.ParticlesParticle được dùng trong game để biểu diễn những mảnh vỡ nhỏ, tia lửa của pháo hoa, hay bấtkỳ một thực thể nhỏ chuyển động nào.Mỗi particle là một thực thể độc lập với cách thức chuyển động và biểu hiện được định nghĩatrước, ngay khi nó được tạo ra. Trong suốt quá trình tồn tại, nó tự cập nhật các thuộc tính vềhướng di chuyển và tốc độ di chuyển. Particle dùng cho các hiệu ứng khác nhau thường đượctạo ra từ một thứ gọi là emitter. Công việc của emitter là tạo ra và xác lập các thuộc tính choparticle trước khi kích hoạt chúng. Emitter cũng điều khiển cả số lượng và thời điểm tạo ra cácparticle.Particle được tạo ra bởi các đa giác có texture, gọi là billboard, chúng luôn hướng (mặt phẳng)về phía camera. Billboard có rất nhiều ứng dụng như tạo các đám mây, rừng cây, và nhiều hơncả là tạo các particle. Bởi vì mỗI billboard thường chỉ chứa 2 tam giác (với 1 loạI texture), nênbạn có thể render một chuỗI nhiều billboard để tạo ra các hiệu ứng đặc biệt đẹp mắt.Trước khi tung các particle vào trong scene, bạn cần biết chi tiết cách mà nó làm việc.Các thuộc tính của ParticleMỗi particle có những thuộc tính riêng quy định cách biểu hiện của nó. Danh sách dướI đây làmột vài thuộc tính cơ bản mà hầu hết các particle đều có:■ Vị trí. Vị trí hiện tại của particle.■ Chuyển động. Điều khiển hướng và tốc độ di chuyển.■ Màu sắc. Màu của particle. 118 Dịch bởi TransTeam diễn đàn Gamedev.VNBeginning DirectX9■ Cờ hoạt động. Thuộc tính nhằm xác định trạng thái hoạt động của particle. BởI vì một sốparticle có thể chuyển động ra ngoài màn hình do đó cờ này dùng để tiết kiệm tài nguyên hệthống bằng cách giải phóng các particle này.■ Texture. Texture sử dụng cho particle.Mỗi particle được phóng ra từ emitter đều chứa các thuộc tính trên. Trong phần tiếp theo, chúngta sẽ học cách sử dụng các thuộc tính đó để tạo ra cấu trúc của một particle.Cấu trúc ParticleCấu trúc particle chứa toàn bộ các thuộc tính của một particle. Bằng cách tạo ra một mảng biếncó cấu trúc này, bạn có thể cập nhật và render nhiều particle một cách nhanh chóng.typedef struct{D3DXVECTOR3 m_vCurPos; // vecto vị tríD3DXVECTOR3 m_vCurVel; // vecto chuyển độngD3DCOLOR m_vColor; // màu của particleBOOL m_bAlive; // cờ hoạt động} Particle;Vị trí hiện tại của một particle được lưu trữ trong biến có cấu trúc D3DXVECTOR3. Cấu trúc nàycho phép mô tả particle trong không gian ba chiều.Vecto chuyển động chứa thông tin về hướng và vận tốc của particle. Màu của particle thì đượcchứa trong cấu trúc dạng D3DCOLOR. Bạn có thể sử dụng bất kì lệnh tạo màu D3DCOLORnào để định nghĩa màu cho particle.Biến cuối cùng trong cấu trúc particle là m_bAlive. Biến này xác định rằng một particle có đangđược hoạt động hay không. Trước khi một particle được phóng ra từ emitter, thì biến này có giátrị là false.Các particle được tạo ra như thế nào?Các particle được tạo ra bằng cách gán cho các biến trong cấu trúc particle một giá trị khởi tạo.Trong suốt quá trình tồn tại của mỗi particle, các biến này sẽ được cập nhật liên tục dựa trênhiệu ứng của emitter. Bởi vì bạn sẽ thường xuyên cần đến nhiều hơn một particle, cho nên tốtnhất là bạn nên định nghĩa chúng trong một mảng. Đoạn code sau cho thấy cách khai báo vàkhởi tạo cho một nhóm các particle.// Định nghĩa số particle cần tạo#define MAXNUM_PARTICLES 150// Định nghĩa cấu trúc lưu trữ thông tin về particletypedef struct{// vecto vị tríD3DXVECTOR3 m_vCurPos;// vecto chuyển độngD3DXVECTOR3 m_vCurVel;// màuD3DCOLOR m_vColor;} Particle;// tạo một mảng các particleParticle ParticleArray[MAXNUM_PARTICLES];// vòng lặp để khởi tạo giá trị cho particlefor( int i = 0; i < MAXNUM_PARTICLES; i++ ){// đặt vị trí hiện tại cho các particle ở gốc tọa độParticleArray[i].m_vCurPos = D3DXVECTOR3(0.0f,0.0f,0.0f);// tạo các giá trị ngẫu nhiên cho các thành phần của vecto chuyển độngfloat vecX = ((float)rand() / RAND_MAX); 119 Dịch bởi TransT ...