Siêu thị PDFTải ngay đi em, trời tối mất

Thư viện tri thức trực tuyến

Kho tài liệu với 50,000+ tài liệu học thuật

© 2023 Siêu thị PDF - Kho tài liệu học thuật hàng đầu Việt Nam

Các bước đầu về DirectX phần 8 pptx
MIỄN PHÍ
Số trang
18
Kích thước
465.9 KB
Định dạng
PDF
Lượt xem
860

Các bước đầu về DirectX phần 8 pptx

Nội dung xem thử

Mô tả chi tiết

Beginning DirectX9 Dịch bởi TransTeam diễn đàn Gamedev.VN

127

Dòng đầu tiên trong initParticles là lời gọi tới hàm tạo vertex buffer của emitter. Bởi vì vertex

buffer cần được cập nhật thường xuyên, nên nó được tạo ra với các cờ là

D3DUSAGE_DYNAMIC | D3DUSAGE_WRITEONLY.

Tiếp theo, một vòng lặp duyệt qua tất cả các particle chứa trong emitter và thiết lập cờ hoạt

động cho cúng, thiết lập màu, và vị trí ban đầu. Thông thường, các particle của một emitter

thường xuất hiện ở cùng một vị trí.

Hướng và vận tốc của particle được thiết lập một cách ngẫu nhiên. Điều này khiến cho mỗi

particle chuyển động về các hướng khác nhau.

Hàm update dưới đây, cập nhật vị trí cho từng particle mỗi frame:

/******************************************************************************

* update

*****************************************************************************/

void Emitter::update(void)

{

// duyệt qua để cập nhật vị trí cho các particle

for (int i=0; i<numParticles; i++)

{

// cộng vecto vị trí với vecto vận tốc

m_particles[i].m_vCurPos += m_particles[i].m_vCurVel;

}

}

Vị trí của mỗi particle được thay đổi bằng cách cộng vecto vận tốc (bao gồm cả hướng và độ

lớn) với vecto vị trí hiện tại. Bởi vì giá trị này được cập nhật trên mỗi frame, nên ta thu được

các particle chuyển động trên màn hình.

Hàm cuối cùng là render:

/******************************************************************************

* render

******************************************************************************/

void Emitter::render()

{

CUSTOMVERTEX *pPointVertices;

// Khóa vertex buffer và cập nhật các particle trong đó

pVertexBuffer->Lock( 0,

numParticles * sizeof(CUSTOMVERTEX),

(void**)&pPointVertices,

D3DLOCK_DISCARD );

// duyệt qua các particle

for( int i = 0; i < numParticles; ++i )

{

pPointVertices->psPosition = m_particles[i].m_vCurPos;

pPointVertices->color = m_particles[i].m_vColor;

pPointVertices++;

}

// Mở khóa vertex buffer

pVertexBuffer->Unlock();

// thiết lập texture

emitterDevice->SetTexture( 0, pTexture );

// thiết lập luồng vertex

emitterDevice->SetStreamSource( 0, pVertexBuffer, 0, sizeof(CUSTOMVERTEX) );

// thiết lập định dạng vertex

emitterDevice->SetFVF( D3DFVF_CUSTOMVERTEX );

Tải ngay đi em, còn do dự, trời tối mất!