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 6 pps
Nội dung xem thử
Mô tả chi tiết
Beginning DirectX9 Dịch bởi TransTeam diễn đàn Gamedev.VN
91
D3DXMatrixScaling(&matScale, 2.0f, 2.0f, 2.0f);
// Nhân ma trận đối tượng với ma trận tỉ lệ
D3DXMatrixMultiply(&objMat, & objMat, &matScaling);
Biến objMat ở trên biểu diễn ma trận gốc của đối tượng. nhân ma trận của đối tượng với
ma trận tỉ lệ ta sẽ có thể thu phóng đối tượng khi vẽ.
Thứ tự trong các phép tính toán ma trận
Thứ tự trong các phép toán là rất quan trọng. Ví dụ như, nếu bạn muốn xoay một đối
tượng quanh tâm của nó và sau đó dịch chuyển nó đi đâu đó, thì trước tiên bạn cần tính
toán với ma trận xoay trước tiếp đó là đến ma trận tịnh tiến. Nếu hai phép tính này được
đổi chỗ cho nhau, thì đối tượng sẽ được tịnh tiến đến 1 vị trí khác sau đó mới được xoay
quanh gốc tọa độ. Điều này có thể làm cho đối tượng được đặt ở một ví trí khác và hướng
theo một hướng khác trong không gian. Đoạn code sau chỉ ra trình tự đúng để thực hiện
phép xoay và tịnh tiến đối tượng:
D3DXMATRIX objRotate;
D3DXMATRIX objTranslation;
D3DXMATRIX objFinal;
// phép xoay
D3DXMatrixRotationY(&objRotate, D3DXToRadian(45));
// phép tịnh tiến
D3DXMatrixTranslation(&objTranslation, 1.0f, 0.0f, 0.0f);
// nhân ma trận xoay và ma trận tịnh tiến với nhau
D3DXMatrixMultiply(&objFinal, &objRotate, &objTranslation);
// thực hiện phép biến đổi trong không gian thực
pd3dDevice->SetTransform(D3DTS_WORLD, &objFinal);
Bước thứ nhất là tạo ma trận xoay đối tượng, objRatate. Sử dụng hàm
D3DXMatrixRotationY như trên, đối tượng sẽ được quay một góc 45 độ quanh trục Y.
Tiếp theo ta tịnh tiến đối tượng đã xoay một đơn vị về bên phải bằng cách sử dụng hàm
D3DXMatrixTranslation.
Cuối cùng, ta tạo ra ma trận biến đổi bằng cách nhân ma trận xoay và ma trận tịnh tiến
với nhau với hàm D3DXMatrixMultiply. Nếu ma trận xoay và ma trận được đảo chỗ cho
nhau (hoán vị) trong lời gọi hàm D3DXMatrixMultiply, thì phép tịnh tiến sẽ được thực
hiện trước phép xoay, và đối tượng bị rời sang vị trí khác.
Tạo một camera bằng các phép chiếu
Bạn có thể tạo ra một camera trong Direct3D bằng cách định nghĩa một ma trận cho bước
(projection transformation). Ma trận này định nghĩa một vùng nhìn cho camera, hệ số co,
mặt phẳng clipping xa và gần.
Sau khi bạn đã tạo được ma trận chiếu, bạn thiết lập nó thông qua hàm SetTransform. Bạn
có thể thấy rằng, hàm SetTransform đã được sử dụng ở ví dụ trước. SetTransform, định
nghĩa ở dưới đây, cho phép thiết lập ma trận cho các bước của hệ thống chuyển đổi hình
học. Ví dụ như, khi bạn thiết lập ma trận cho một camera, cũng có nghĩa là bạn đang quy
định cho scene sẽ được quan sát ra sao trong suốt giai đoạn chiếu. Giai đoạn này cũng là
giai đoạn cuối cùng của hệ chuyển đổi hình học, nó quy định cách mà khung cảnh 3D sẽ
được render dưới dạng 2D.
HRESULT SetTransform(