Begining DX9_7
Số trang: 13
Loại file: pdf
Dung lượng: 428.68 KB
Lượt xem: 1
Lượt tải: 0
Xem trước 2 trang đầu tiên của tài liệu này:
Thông tin tài liệu:
Hàm SetTransform cần 2 đối số: ■ State. Xác định giai đoạn của hệ chuyển đổi hình học cần chỉnh sửa. ■ pMatrix. Con trỏ có cấu trúc D3DMATRIX được dùng để thiết lập cho giai đoạn trên. Đoạn code sau cho thấy cách tạo và định nghĩa một ma trận cho giai đoạn chiếu.D3DXMATRIX matProj;
Nội dung trích xuất từ tài liệu:
Begining DX9_7Simpo PDF Merge and Split Unregistered Version - Dịch bởi TransTeam diễn đàn Gamedev.VN Beginning DirectX9 http://www.simpopdf.com D3DTRANSFORMSTATETYPE State, CONST D3DMATRIX *pMatrix ); Hàm SetTransform cần 2 đối số: ■ State. Xác định giai đoạn của hệ chuyển đổi hình học cần chỉnh sửa. ■ pMatrix. Con trỏ có cấu trúc D3DMATRIX được dùng để thiết lập cho giai đoạn trên. Đoạn code sau cho thấy cách tạo và định nghĩa một ma trận cho giai đoạn chiếu. D3DXMATRIX matProj; // ma trận chiếu /********************************************************************** * createCamera * tạo camera ảo ***********************************************************************/ void createCamera(float nearClip, float farClip) { // Xác định vùng nhìn, hệ số co và mặt phẳng clipping xa, gần D3DXMatrixPerspectiveFovLH(&matProj, D3DX_PI/4, 640/480, nearClip, farClip); // thiết lập ma trận matProj cho giai đoạn chiếu pd3dDevice->SetTransform(D3DTS_PROJECTION, &matProj); } Thay vì tự mình tạo một ma trận chiếu, ta đã dùng hàm D3DXMatrixPerspectiveFovLH do D3DX cung cấp. Hàm này tạo một ma trận đầu ra chứa trong matProj được khai báo ở trên, nó cho phép bạn xác định góc nhìn phối cảnh, hệ số co, và mặt phẳng clipping chỉ trong một lời gọi hàm. Sau khi bạn đã tạo đươc ma trận chiếu, bạn có thể thiết lập nó cho hệ chuyển đổi hình học thông qua hàm SetTransform. Bởi vì ma trận này tác dụng lên giai đoạn chiếu, cho nên tham số đưa vào là D3DTS_PROJECTION. Vị trí và hướng của camera Đến thời điểm này, bạn đã có thể sử dụng được camera rồi. Camera tác động lên mọi thứ trong khung cảnh cũng giống như là các đối tượng được chuyển qua giai đoạn chiếu trong hệ chuyển đổi hình học vậy. Chỉ có một điều là, camera của ta đang được đặt ở gốc tọa độ. Bởi vì camera trong thế giới thực là một vật thể có thể chuyển động được, nên ta cũng cần làm cho camera ảo có thể làm được giống như vậy. Nó cần có khả năng chuyển động trong khung cảnh và cũng có thể thay đổi hướng nhìn. Để đạt được 2 tiêu chí này, bạn cần thay đổi ma trận tương ứng với giai đoạn View transformation. Mặc định, ma trận này được đặt là ma trận đồng nhất cố định camera ảo ở gốc tọa độ. Để thay đổi vị trí và hướng của camera, bạn cần tạo một ma trận mới. Cách đơn giản nhất để làm điều đó là sử dụng hàm trợ giúp D3DXMatrixLookAtLH của D3DX. Hàm D3DXMatrixLookAtLH cho phép bạn chỉ ra vị trí của camera (định nghĩa như một vecto dạng D3DXVECTOR3), nơi mà camera nhìn vào (cũng dạng D3DXVECTOR3), và hướng của camera (cũng là dạng D3DXVECTOR3). Đoạn code sau chỉ ra cách tạo ma trận quan sát (view). D3DXMATRIX matView; // ma trận view /************************************************************************* * pointCamera * đặt điểm nhìn cho camera thông qua 1 vecto *************************************************************************/ 92Simpo PDF Merge and Split Unregistered Version - Dịch bởi TransTeam diễn đàn Gamedev.VN Beginning DirectX9 http://www.simpopdf.com void pointCamera(D3DXVECTOR3 cameraPosition, D3DXVECTOR3 cameraLook) { D3DXMatrixLookAtLH ( &matView, &cameraPosition, // vị trí camera &cameraLook, // điểm nhìn &D3DXVECTOR3 (0.0f, 1.0f, 0.0f)); // hướng lên trên // thiết lập ma trận này cho giai đoạn view pd3dDevice->SetTransform (D3DTS_VIEW, &matView); } Hàm pointCamera cần hai đối số: cameraLook và cameraPosition. Biến cameraPosition chứa vị trí hiện tại của camera. Ví dụ như, nếu camera được đặt ở cách gốc tọa độ 2 đơn vị dọc theo trục Y, cameraPosition sẽ có dạng (0.0f, -2.0f, 0.0f). Biến cameraLook thông báo cho camera nơi cần hướng tới và nó có quan hệ với vị trí đặt camera. Ví dụ như, nếu coi camera đặt ở vị trí10 đơn vị dương dọc theo trục Y,10 đơn vị âm theo trục Z và tưởng tượng rằng ta muốn camera hướng về phía gốc tọa độ. Bởi vì lúc này camera đã được đặt ở phía trên so với gốc tọa độ, do đó muốn thấy được gốc tọa độ nó cần phải nhìn xuống dưới. Ta cần thiết lập cho vecto cameraLook giá trị là (0.0f, - 10.0f; 0.0f), điều này có nghĩa là camera hướng thẳng theo trục Y và hướng xuống dưới. Camera lúc đó có thể nhìn các thấy đối tượng đặt ở gốc tọa độ và từ phía trên đầu của chúng. Ma trận cuối cùng mà D3DXMatrixLookAtLH tạo ra được lưu trữ trong matView và được thiết lập cho giai đoạn view của hệ chuyển đổi. Giá trị D3DTS_VIEW được truyền cho hàm SetTransform thông báo cho Direct3D rằng ma trận view cần được cập nhật lại. 93Simpo PDF Merge and Split Unregistered Version - Dịch bởi TransTeam diễn đàn Gamedev.VN Beginning DirectX9 http://www.simpopdf.com Tổng kết chương Trong chương này, ta đã giới thiệu những khái niệm chung cần thiết khi xây dựng một ứng dụng 3D. Khi bạn muốn tạo một chương trình quan sát mô hình, hay một game nhập vai góc quay thứ nhất, ma trận và các phép biến đổi chính là nền móng mà game của bạn được xây dựng trên đó. Những gì bạn đã được học Trong chương này, bạn đã được học: ■ Cách chuyển các đối tượng 3D qua hệ chuyển đổi hình học. ■ Ma trận là gì khi nào và làm thế nào sử dụng chúng ...
Nội dung trích xuất từ tài liệu:
Begining DX9_7Simpo PDF Merge and Split Unregistered Version - Dịch bởi TransTeam diễn đàn Gamedev.VN Beginning DirectX9 http://www.simpopdf.com D3DTRANSFORMSTATETYPE State, CONST D3DMATRIX *pMatrix ); Hàm SetTransform cần 2 đối số: ■ State. Xác định giai đoạn của hệ chuyển đổi hình học cần chỉnh sửa. ■ pMatrix. Con trỏ có cấu trúc D3DMATRIX được dùng để thiết lập cho giai đoạn trên. Đoạn code sau cho thấy cách tạo và định nghĩa một ma trận cho giai đoạn chiếu. D3DXMATRIX matProj; // ma trận chiếu /********************************************************************** * createCamera * tạo camera ảo ***********************************************************************/ void createCamera(float nearClip, float farClip) { // Xác định vùng nhìn, hệ số co và mặt phẳng clipping xa, gần D3DXMatrixPerspectiveFovLH(&matProj, D3DX_PI/4, 640/480, nearClip, farClip); // thiết lập ma trận matProj cho giai đoạn chiếu pd3dDevice->SetTransform(D3DTS_PROJECTION, &matProj); } Thay vì tự mình tạo một ma trận chiếu, ta đã dùng hàm D3DXMatrixPerspectiveFovLH do D3DX cung cấp. Hàm này tạo một ma trận đầu ra chứa trong matProj được khai báo ở trên, nó cho phép bạn xác định góc nhìn phối cảnh, hệ số co, và mặt phẳng clipping chỉ trong một lời gọi hàm. Sau khi bạn đã tạo đươc ma trận chiếu, bạn có thể thiết lập nó cho hệ chuyển đổi hình học thông qua hàm SetTransform. Bởi vì ma trận này tác dụng lên giai đoạn chiếu, cho nên tham số đưa vào là D3DTS_PROJECTION. Vị trí và hướng của camera Đến thời điểm này, bạn đã có thể sử dụng được camera rồi. Camera tác động lên mọi thứ trong khung cảnh cũng giống như là các đối tượng được chuyển qua giai đoạn chiếu trong hệ chuyển đổi hình học vậy. Chỉ có một điều là, camera của ta đang được đặt ở gốc tọa độ. Bởi vì camera trong thế giới thực là một vật thể có thể chuyển động được, nên ta cũng cần làm cho camera ảo có thể làm được giống như vậy. Nó cần có khả năng chuyển động trong khung cảnh và cũng có thể thay đổi hướng nhìn. Để đạt được 2 tiêu chí này, bạn cần thay đổi ma trận tương ứng với giai đoạn View transformation. Mặc định, ma trận này được đặt là ma trận đồng nhất cố định camera ảo ở gốc tọa độ. Để thay đổi vị trí và hướng của camera, bạn cần tạo một ma trận mới. Cách đơn giản nhất để làm điều đó là sử dụng hàm trợ giúp D3DXMatrixLookAtLH của D3DX. Hàm D3DXMatrixLookAtLH cho phép bạn chỉ ra vị trí của camera (định nghĩa như một vecto dạng D3DXVECTOR3), nơi mà camera nhìn vào (cũng dạng D3DXVECTOR3), và hướng của camera (cũng là dạng D3DXVECTOR3). Đoạn code sau chỉ ra cách tạo ma trận quan sát (view). D3DXMATRIX matView; // ma trận view /************************************************************************* * pointCamera * đặt điểm nhìn cho camera thông qua 1 vecto *************************************************************************/ 92Simpo PDF Merge and Split Unregistered Version - Dịch bởi TransTeam diễn đàn Gamedev.VN Beginning DirectX9 http://www.simpopdf.com void pointCamera(D3DXVECTOR3 cameraPosition, D3DXVECTOR3 cameraLook) { D3DXMatrixLookAtLH ( &matView, &cameraPosition, // vị trí camera &cameraLook, // điểm nhìn &D3DXVECTOR3 (0.0f, 1.0f, 0.0f)); // hướng lên trên // thiết lập ma trận này cho giai đoạn view pd3dDevice->SetTransform (D3DTS_VIEW, &matView); } Hàm pointCamera cần hai đối số: cameraLook và cameraPosition. Biến cameraPosition chứa vị trí hiện tại của camera. Ví dụ như, nếu camera được đặt ở cách gốc tọa độ 2 đơn vị dọc theo trục Y, cameraPosition sẽ có dạng (0.0f, -2.0f, 0.0f). Biến cameraLook thông báo cho camera nơi cần hướng tới và nó có quan hệ với vị trí đặt camera. Ví dụ như, nếu coi camera đặt ở vị trí10 đơn vị dương dọc theo trục Y,10 đơn vị âm theo trục Z và tưởng tượng rằng ta muốn camera hướng về phía gốc tọa độ. Bởi vì lúc này camera đã được đặt ở phía trên so với gốc tọa độ, do đó muốn thấy được gốc tọa độ nó cần phải nhìn xuống dưới. Ta cần thiết lập cho vecto cameraLook giá trị là (0.0f, - 10.0f; 0.0f), điều này có nghĩa là camera hướng thẳng theo trục Y và hướng xuống dưới. Camera lúc đó có thể nhìn các thấy đối tượng đặt ở gốc tọa độ và từ phía trên đầu của chúng. Ma trận cuối cùng mà D3DXMatrixLookAtLH tạo ra được lưu trữ trong matView và được thiết lập cho giai đoạn view của hệ chuyển đổi. Giá trị D3DTS_VIEW được truyền cho hàm SetTransform thông báo cho Direct3D rằng ma trận view cần được cập nhật lại. 93Simpo PDF Merge and Split Unregistered Version - Dịch bởi TransTeam diễn đàn Gamedev.VN Beginning DirectX9 http://www.simpopdf.com Tổng kết chương Trong chương này, ta đã giới thiệu những khái niệm chung cần thiết khi xây dựng một ứng dụng 3D. Khi bạn muốn tạo một chương trình quan sát mô hình, hay một game nhập vai góc quay thứ nhất, ma trận và các phép biến đổi chính là nền móng mà game của bạn được xây dựng trên đó. Những gì bạn đã được học Trong chương này, bạn đã được học: ■ Cách chuyển các đối tượng 3D qua hệ chuyển đổi hình học. ■ Ma trận là gì khi nào và làm thế nào sử dụng chúng ...
Tìm kiếm theo từ khóa liên quan:
tài liệu cơ khí kỹ thuật cơ khí công nghệ cơ khí chế tạo máy tài liệu về chế tạo máyTài liệu liên quan:
-
ĐỀ TÀI THIẾT KẾ QUY TRÌNH CÔNG NGHỆ GIA CÔNG BÍCH ĐUÔI ( TẬP THUYẾT MINH)
54 trang 197 0 0 -
81 trang 186 0 0
-
Đồ án tốt nghiệp: Thiết kế kỹ thuật máy ép thủy lực tải trọng 70 tấn phục vụ cho nhà máy Z751
84 trang 183 0 0 -
143 trang 175 0 0
-
Giáo trình MÁY TIỆN – MÁY KHOAN - MÁY DOA
35 trang 145 0 0 -
Đồ án 'TÍNH TOÁN ĐỘNG CƠ ĐỐT TRONG'.
49 trang 143 0 0 -
Giáo trình công nghệ chế tạo máy - Chương 11: Các phương pháp gia công mặt phẳng
17 trang 140 0 0 -
Giáo trình Dung sai lắp ghép - ĐH Công Nghiệp Tp. HCM
113 trang 131 0 0 -
156 trang 128 0 0
-
ĐỒ ÁN CƠ SỞ THIẾT KẾ MÁY TRẠM DẨN ĐỘNG BĂNG TẢI - Phần 4
4 trang 124 0 0