Download miễn phí Ebook Beginning DirectX9





Bốcục của sách
Lời giới thiệu
PHẦN I. NHỮNG KIẾN THỨC NỀN TẢNG
Chương 1. DirectX là gì, tại sao và làm thếnào đểsửdụng nó
Chương 2. Ví dụ đầu tiên sửdụng DirectX
Chương 3. Phông nền, khung hình, hoạt cảnh.
PHẦN II. NHỮNG THÀNH PHẦN CƠ BẢN CỦA MỘT THẾ GIỚI 3D
Chương 4. Những kiến thức cơbản về3D
Chương 5. Ma trận, các phép biến đổi và phép xoay trong không gian
Chương 6. Bảng mầu, vật liệu phủvà ánh sáng trong không gian
Chương 7. Chia nhỏvà làm mịn đối tượng
Chương 8. Vật thể, điểm chèn và các hiệu ứng
PHẦN III. NHỮNG KIẾN THỨC BỔ XUNG
Chương 9.Sửdụng DirectInput
Chương 10.Hiệu ứng âm thanh bằng DirectSound
Chương 11.Xây dựng một dựán mẫu
PHẦN IV. PHỤ LỤC
Phụlục A.Giải đáp các bài tập cuối các chương
Phụlục B.Cách sửdụng CD-ROM
Giải thích các thuật ngữ
Chỉmục các từkhoá



Để tải bản Đầy Đủ của tài liệu, xin Trả lời bài viết này, Mods sẽ gửi Link download cho bạn sớm nhất qua hòm tin nhắn.
Ai cần download tài liệu gì mà không tìm thấy ở đây, thì đăng yêu cầu down tại đây nhé:
Nhận download tài liệu miễn phí

Tóm tắt nội dung tài liệu:

ma trận biến đổi. Ma trận thứ
ba là vecto sau khi đã biến đổi.
Bạn có thể thực hiện phép nhân ma trận bằng cách nhân hàng của ma trận này với cột
của ma trận kía.
⎥⎥
⎥⎥


⎢⎢
⎢⎢


⎥⎥
⎥⎥


⎢⎢
⎢⎢


16151413
1211109
8765
4321
x
PONM
LKJI
HGFE
DCBA
Lấy hàng của ma trận bên trái nhân với cột của ma trận bên phải. Ví dụ ta lấy hàng 1 của
ma trận trái nhân cột 1 của ma trận phải ta sẽ có:
A × 1 + B × 5 + C × 9 + D × 13
Cách định nghĩa một ma trận trong Direct3D
Direct3D đơn giản hóa việc tạo ma trận thông qua cấu trúc D3DMATRIX như sau:
typedef struct _D3DMATRIX {
union {
struct {
float _11, _12, _13, _14;
float _21, _22, _23, _24;
float _31, _32, _33, _34;
float _41, _42, _43, _44;
};
float m[4][4];
};
} D3DMATRIX;
Sử dụng cấu trúc D3DMATRIX mà Direct3D cung cấp, bạn còn được cung cấp thêm nhiều
hàm tiện lợi khác khi thao tác trên ma trận ví dụ như hàm khởi tạo ma trận.
D3DX làm cho ma trận đơn giản hơn
Phần trên, ta đã được giới thiệu về cấu trúc D3DMATRIX mà Direct3D cung cấp. Nó giúp
đơn giản hóa việc định nghĩa và quản lý ma trận nhưng vẫn bắt bạn phải tự thực hiện tính
toán trên đó, tuy vậy thư viện D3DX sẽ giúp bạn điều này.
Thư viện D3DX cũng có một cấu trúc là D3DXMATRIX. Các thành phần trong
D3DXMATRIX cũng giống như của D3DMATRIX, nhưng D3DXMATRIX cung cấp thêm
Chú ý:
phép nhân ma trận không có tính hoán vị, nếu ta đổi chỗ hai ma trận này với nhau thì ta có
thể sẽ có một ma trận kết quả khác. Vì vậy, thứ tự của các ma trận là yếu tố rất quan trọng
trong phép nhân ma trận.
Beginning DirectX9 Dịch bởi TransTeam diễn đàn Gamedev.VN
85
một vài tiện ích khác nữa. Nó cung cấp một vài hàm cho phép bạn thực hiện tính toán, so
sánh trên đó.
Cấu trúc D3DXMATRIX được định nghĩa như sau:
typedef struct D3DXMATRIX : public D3DMATRIX {
public:
D3DXMATRIX() {};
D3DXMATRIX( CONST FLOAT * );
D3DXMATRIX( CONST D3DMATRIX& );
D3DXMATRIX( FLOAT _11, FLOAT _12, FLOAT _13, FLOAT _14,
FLOAT _21, FLOAT _22, FLOAT _23, FLOAT _24,
FLOAT _31, FLOAT _32, FLOAT _33, FLOAT _34,
FLOAT _41, FLOAT _42, FLOAT _43, FLOAT _44 );
// access grants
FLOAT& operator () ( UINT Row, UINT Col );
FLOAT operator () ( UINT Row, UINT Col ) const;
// casting operators
operator FLOAT* ();
operator CONST FLOAT* () const;
// assignment operators
D3DXMATRIX& operator *= ( CONST D3DXMATRIX& );
D3DXMATRIX& operator += ( CONST D3DXMATRIX& );
D3DXMATRIX& operator -= ( CONST D3DXMATRIX& );
D3DXMATRIX& operator *= ( FLOAT );
D3DXMATRIX& operator /= ( FLOAT );
// unary operators
D3DXMATRIX operator + () const;
D3DXMATRIX operator - () const;
// binary operators
D3DXMATRIX operator * ( CONST D3DXMATRIX& ) const;
D3DXMATRIX operator + ( CONST D3DXMATRIX& ) const;
D3DXMATRIX operator - ( CONST D3DXMATRIX& ) const;
D3DXMATRIX operator * ( FLOAT ) const;
D3DXMATRIX operator / ( FLOAT ) const;
friend D3DXMATRIX operator * ( FLOAT, CONST D3DXMATRIX& );
BOOL operator == ( CONST D3DXMATRIX& ) const;
BOOL operator != ( CONST D3DXMATRIX& ) const;
} D3DXMATRIX, *LPD3DXMATRIX;
Điều bạn có thể thấy đầu tiên là D3DXMATRIX là một cấu trúc kế thừa từ D3DMATRIX
và bổ xung thêm một số hàm khiến cho nó giống như một lớp (class) ở trong C++. Theo
cách định nghĩa này, bạn chỉ có thể truy cập tới nó thông qua C++, và nó chỉ được sử
dụng như là một lớp (class) thật sự với các thành phần public.
Nhìn qua cấu trúc này, bạn có thể thấy nó viết chồng (overload) rất nhiều toán tử dùng
cho việc tính toán trên ma trận. Bởi vì, cấu trúc D3DXMATRIX rất hữu dụng, nên chúng ta
sẽ sử dụng nó nhiều ở các phần tiếp theo.
Điều khiển các đổi tượng 3D thông qua ma trận
Như vậy, ta đã biết sơ qua về khái niệm ma trận, ta sẽ tiếp tục xem xét tính hữu dụng của
nó. Ta sử dụng ma trận khi muốn kiểm soát các đối tượng trong không gian. Cho dù bạn
muốn di chuyển đối tượng lòng vòng hay chỉ đơn giản là xoay nó, bạn đều cần thực
hiện thông qua ma trận. D3DX cung cấp hàng loạt các hàm để bạn có thể kiểm soát các
đối tương dễ dàng hơn thông qua ma trận. Dưới đây là một trong số đó:
■ D3DXMatrixIdentity. Làm sạch ma trận (biến nó về lại ma trận đồng nhất).
Beginning DirectX9 Dịch bởi TransTeam diễn đàn Gamedev.VN
86
■ D3DXMatrixRotationX. Xoay đối tượng quanh trục X.
■ D3DXMatrixRotationY. Xoay đối tượng quanh trục Y.
■ D3DXMatrixScaling. Phép tỉ lệ (thu phóng) một đỗi tượng.
■ D3DXMatrixTranslation. Dịch chuyển đối tượng theo các trục.
Di chuyển đối tượng
Để di chuyển đối tượng lòng vòng trong game, bạn cần thực hiện phép tịnh tiến.
Phép tịnh tiến sẽ tác động làm cho đối tượng di chuyển theo các trục tọa độ. Nếu bạn
muốn di chuyển đối tượng sang phải chẳng hạn, bạn có thể tịnh tiến nó dọc theo trục X về
hướng dương.
Tịnh tiến các vật thể được thực hiện thông qua hàm D3DXMatrixTranslation như dưới đây:
D3DXMATRIX *D3DXMatrixTranslation(
D3DXMATRIX *pOut,
FLOAT x,
FLOAT y,
FLOAT z
);
Hàm D3DXMatrixTranslation cần 4 đối số.
■ pOut. Ma trận đầu ra. Con trỏ đến đối tượng D3DXMATRIX.
■ x. Khoảng dịch chuyển theo trục X. Chấp nhận cả âm hay dương.
■ y. Khoảng dịch chuyển theo trục Y.
■ z. Khoảng dịch chuyển theo trục Z.
Đoạn code sau cho thấy cách sử dụng hàm D3DXMatrixTranslation
D3DXMATRIX matTranslate;
D3DXMATRIX matFinal;
// Đưa ma trận matFinal về ma trận đồng nhất
D3DXMatrixIdentity(&matFinal);
// tịnh tiến đối tượng 64 đơn vị về bên phải theo trục X.
// Ma trận kết quả lưu vào matTranslate
D3DXMatrixTranslation(&matTranslate, 64.0f, 0.0f, 0.0f);
// Nhân ma trận tịnh tiến và ma trận đồng nhất để có ma trận biến đổi
// ma trận biến đổi lưu trữ trong finalMat
D3DXMatrixMultiply(&finalMat, &finalMat, & matTranslate);
// thực hiện phép biến đổi đối tượng trong không gian thực
pd3dDevice->SetTransform(D3DTS_WORLD, &finalMat);
Hàm D3DXMatrixTranslation được sử dụng để tịnh tiến đối tượng 64 đơn vị về bên phải
trục X. Để thực hiện phép biến đổi này với đối tượng, ta nhân ma trận tịnh tiến với ma
trận đồng nhất, sau đó đối tượng được quy đổi về không gian thực.
Xoay đối tượng
Phép tịnh tiến đối tượng thật tuyệt, nhưng bạn vẫn chưa thực sự làm được những thứ mà
game của bạn đòi hỏi. Sẽ còn gì là thú vị nếu như trong một trò đua xe bạn không thể
lượn chiếc xe quanh một vòng cua … bởi lý do xe của bạn chỉ có thể di chuyển trên một
đường thẳng? Đó là lý do mà bạn cần đến phép xoay. Nếu chiếc xe có khả năng xoay thì
thì nó có thể ngoặt, và lượn theo các khúc cua.
Beginning DirectX9 Dịch bởi TransTeam diễn đàn Gamedev.VN
87
Kết hợp giữa phép xoay và tịnh tiến các đối tượng 3D cho phép nhân vật của bạn có thể
di chuyển tự do trong không gian game. Phép xoay cho phép những chiếc bánh xe ô tô có
thể quay, cánh tay có thể cử động, quả bóng chày có thể xoay tròn khi bay…
Phép xoay là một quá trình quay một đối tượng xung quanh các trục tọa độ. Bởi vì phép
xoay được thực hiện thông qua ma trận, nên thư viện D3DX đã cung cấp một vài hàm
hữu ich để đơn giản hóa quá trình đó.
Phép xoay có thể thực hiện trên các trục vào bất kì thời điểm nào và trên bất kì trục nào
trong 3 trục tọa độ. D3DX cung cấp cho mỗi trục tọa độ một hàm xoay. Ví dụ như, nếu
bạn muốn xoay đỗi tượng quanh trục X, bạn có thể dùng hàm D3DX...
 
Top