1. Trang chủ
  2. » Giáo Dục - Đào Tạo

BÁO CÁO THỰC TẬP-XÂY DỰNG ỨNG DỤNG 3D VỚI DIRECT 3D

35 341 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 35
Dung lượng 380,49 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

o Direct3D được thiết kế với mục đích là cung cấp sự truy cập độc lập thiết bị tới các phần cứng đồ hoạ 3D, có thể hiểu Direct3D là một giao thức cho việc vẽ trên phần cứng 3D.. 1.2 Tạo

Trang 1

Hà Minh Trung: 20115801

Trang 2

Microsoft DirectX là một tập hợp các giao diện lập trình ứng dụng (API) để xử lý các nhiệm vụ liên quan đến đa phương tiện, đặc biệt là chương trình trò chơi và video trên nền tảng của Microsoft

Direct3D (API đồ họa 3D trong DirectX) được sử dụng rộng rãi trong việc phát triển trò chơi video cho Microsoft

Windows, Microsoft Xbox, và Microsoft Xbox 360.

Do Direct3D là thành phần công bố công khai rộng rãi nhất của DirectX, người ta thường xem tên gọi "DirectX" và

"Direct3D" được sử dụng thay thế cho nhau.

Trang 3

o Direct3D được thiết kế với mục đích là cung cấp sự truy cập độc lập thiết bị tới các phần cứng đồ hoạ 3D, có thể hiểu Direct3D là một giao thức cho việc vẽ trên phần cứng 3D

o Có thể sử dụng Direct3D ở hai chế độ: Immediate Mode và

Retained Mode

o Imediate Mode là một API 3D ở mức độ thấp để liên hệ với thiết bị tăng tốc đồ họa Immediate Mode là lý tưởng cho những nhà phát triển muốn lập chương trình với chất lượng cao trong Windows.

o Retained Mode là một API 3D ở mức cao dành cho các nhà lập trình cần viết nhanh hoặc muốn sử dụng tính năng hỗ trợ về hoạt hình,

Retained Mode được thiết kế ngay trên nền của Immediate Mode

Trang 4

Hệ thống thư viện API của DirectX được phân chia ra làm nhiều thành phần nhỏ, mỗi thành phần này đảm nhiệm những nhiệm vụ khác nhau của hệ thống.

Trang 5

Lớp HAL cung cấp một giao diện đã được chuẩn hoá cho

DirectX, ngoài ra nó có khả năng “nói chuyện” trực tiếp với phần cứng thông qua các xác lập đối với các loại thiết bị điều khiển của chính nó.

Trang 6

Mô hình phân l pDirect3D ớ

Trang 7

I.Xây dựng ứng dụng đồ họa 3D với Direct 3D

1.1 Khai báo biến giao diện direct3D với ComPtr

Chúng ta khai báo các biện giao diện Driect 3D với ComPtr vì vậy

có thể quản lý các biến trong một cách an toàn ngoại lệ Sau đó

chúng ta có thể sử dụng các biến để truy cập vào lớp ComPtr và các thành viên của nó

Trang 8

);

Trang 9

Nếu bạn khai báo ID3D11 RenderTargetView với ComPtr, sau đó bạn có thể sử dụng ComPtr của GetAddress0f phương pháp để có được địa chỉ con trỏ đến ID3D11 RenderTargetView để vượt qua ID3D11DeviceContext :: > OMSet Render Targets OMSet

RenderTargets liên kết với các mục tiêu trả cho các giai đoạn đầu

ra – sát nhập để xác định làm mục tiêu là mục tiêu đầu ra.

Sau đó ứng dụng mẫu được bắt đầu, nó khởi động và tải, sau đó sẵn sàng để chạy.

Trang 10

1.2 Tạo các thiết bị Direct 3D

Sử dụng API Direct3D để render một cảnh, đầu tiên chúng ta phải tạo

ra một thiết bị Direct3D đại diện cho các bộ chuyển đổi màn hình

hiển thị Để tạo ra các thiết bị Direct3D, chúng ta gọi là

D3D11CreateDevice chức năng Direct3D mảng theo thứ tự và trả về

mức độ tính năng hỗ trợ cao nhất.Vì vậy, để có được mức độ tính

năng cao nhất, chúng ta liệt kê các D3D_FEATURE_LEVER mục

mảng từ cao nhất

Trang 11

/ / Đầu tiên, tạo các thiết bị Direct3D

/ / Cờ này là cần thiết để cho phép khả năng tương thích với Direct2D

UINT creationFlags = D3D11_CREATE_DEVICE_BGRA_SUPPORT;

# if được định nghĩa (_DEBUG)

/ / Nếu dự án là trong một gỡ lỗi xây dựng, cho phép gỡ lỗi thông qua lớp SDK với cờ này

ComPtr <ID3D11Device> d3dDevice;

ComPtr <ID3D11DeviceContext> d3dDeviceContext;

Trang 12

nullptr , / / để lại như nullptr nếu phần cứng được sử dụng

creationFlags, / / tùy chọn thiết lập gỡ lỗi và

/ / Lấy Direct3D 11.1 giao diện.

DX :: ThrowIfFailed (d3dDevice.As (& m_d3dDevice));

DX :: ThrowIfFailed ( d3dDeviceContext.As (&

m_d3dDeviceContext));

Trang 13

1.3 Tạo chuỗi trao đổi

Tiếp theo chúng ta tạo ra một chuỗi trao đổi rằng các thiết

bị sử dụng để biểu diễn và màn hình hiển thị Chúng ta khai

báo và khởi tạo một DXGI_SWAP_CHAIN_DESC1 cấu

trúc để mô tả chuỗi trao đổi Sau đó, thiết lập các chuỗi trao đổi như flip – mô hình (đó là một chuỗi trao

đổi có DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL giá trị thiết lập trong SwapEffect thành viên) và thiết lập định

dạng thành viên DXGI_FORMAT_B8G8R8A8_UNORM.

Trang 14

/ / Nếu chuỗi trao đổi không tồn tại, tạo ra nó.

Trang 15

/ / tạo ra trên các bộ chuyển đổi tương tự như các thiết bị D3D hiện có

/ / Trước tiên, lấy các thiết bị DXGI cơ bản từ các thiết bị D3D

ComPtr <IDXGIDevice2> dxgiDevice;

DX :: ThrowIfFailed ( m_d3dDevice.As (& dxgiDevice) );

Trang 16

/ / Đảm bảo rằng DXGI không xếp hàng nhiều hơn một khung tại một thời điểm Cả hai điều này làm giảm / / độ trễ và đảm bảo rằng các ứng dụng sẽ chỉ làm cho sau mỗi VSync, giảm thiểu tiêu thụ / / sức mạnh

DX :: ThrowIfFailed ( dxgiDevice-> SetMaximumFrameLatency (1) );

/ / Tiếp theo, các nhà máy sản xuất phụ huynh từ các thiết bị DXGI

ComPtr <IDXGIAdapter> dxgiAdapter;

DX :: ThrowIfFailed ( dxgiDevice-> GetAdapter (& dxgiAdapter) );

ComPtr <IDXGIFactory2> dxgiFactory;

DX :: ThrowIfFailed ( dxgiAdapter-> GetParent (IID_PPV_ARGS (& dxgiFactory)) );

/ / Cuối cùng, tạo ra chuỗi trao đổi

CoreWindow ^ cửa sổ = m_window.Get ();

DX :: ThrowIfFailed ( dxgiFactory-> CreateSwapChainForCoreWindow

(m_d3dDevice.Get (),

reinterpret_cast <IUnknown*> (cửa sổ),& SwapChainDesc,

nullptr , / / cho phép trên tất cả các màn

& M_swapChain

)

);

Trang 17

1.4 Tạo điểm làm mục tiêu

Để render đồ họa vào cửa sổ, chúng ta phải tạo một cái nhìn làm mục tiêu.Gọi IDXGISwapChain::GetBuffer để có được bộ đệm trở

lại chuỗi trao đổi để sử dụng ta tạo ra các điểm làm mục tiêu Xác

định các bộ đệm trở lại như một kết cấu 2D (ID3D11Texture2D) Để tạo ra các điểm làm mục tiêu, chúng ta gọi ID3D11Device ::

CreateRenderTargetView Chúng ta phải xác định để vẽ cho toàn bộ cửa sổ lõi bằng cách xác định cổng (D3D11_VIEWPORT).

Trang 18

/ / Một khi các chuỗi trao đổi được tạo ra, tạo ra một cái nhìn mục tiêu làm Điều này sẽ / / cho phép Direct3D để render đồ họa vào cửa sổ.

ComPtr <ID3D11Texture2D> backBuffer;

DX :: ThrowIfFailed (m_swapChain-> GetBuffer (0, IID_PPV_ARGS (& backBuffer)) );

DX :: ThrowIfFailed ( m_d3dDevice-> CreateRenderTargetView (backBuffer.Get (),

nullptr ,

& M_renderTargetView

)

); / / Sau khi xem mục tiêu làm được tạo ra, xác định rằng các khung nhìn,

/ / trong đó mô tả những phần của cửa sổ để vẽ, nên bao gồm

viewport.Width = static_cast < nổi > (backBufferDesc.Width);

viewport.Height = static_cast < nổi > (backBufferDesc.Height);

viewport.MinDepth = D3D11_MIN_DEPTH;

viewport.MaxDepth = D3D11_MAX_DEPTH;

m_d3dDeviceContext-> RSSetViewports (1, và khung nhìn);

Trang 19

1.5 Trình bày ảnh kết suất

Chúng ta bước vào một vòng lặp vô tận để liên tục đưa ra và

hiển thị các cảnh

1.ID3D11 DeviceContext :: OMSetRenderTargets để xác

định mục tiêu trả lại như mục tiêu đầu ra.

2 ID3D11 DeviceContext :: ClearRenderTargetView để xóa

các mục tiêu khiến cho một màu.

3.IDXGISwapChain :: hiện tại để trình bày các hình ảnh kết

xuất ra cửa sổ

Trang 20

/ / Nhập các vòng lặp render Lưu ý rằng Windows cửa hàng ứng dụng không bao giờ thoát

Whlie( true )

{ Sự kiện / / Xử lý incoming vào cửa sổ

m_window-> dispatcher-> ProcessEvents (CoreProcessEventsOption :: ProcessAllIfPresent);

/ / Xác định mục tiêu làm cho chúng ta được tạo ra như là mục tiêu đầu ra

m_d3dDeviceContext-> OMSetRenderTargets (1, m_renderTargetView.GetAddressOf (),

nullptr / / sử dụng không stencil sâu

); / / Xoá render mục tiêu vào một màu

const float clearColor [4] = {0.071f, 0.04f, 0.561f, 1.0f};

m_d3dDeviceContext-> ClearRenderTargetView ( m_renderTargetView.Get (), clearColor

/ / Trình bày các hình ảnh kết xuất ra cửa sổ Bởi vì độ trễ khung tối đa được thiết lập để 1,

/ / vòng lặp render sẽ thường được tăng cường với tốc độ làm tươi màn hình, thường là khoảng

/ / 60Hz, bằng cách ngủ các ứng dụng trên hiện tại cho đến khi màn hình được làm mới

DX :: ThrowIfFailed ( m_swapChain-> hiện tại (1, 0) );

}

Trang 21

1.6 Thay đổi kích thước cửa sổ ứng dụng và vùng đệm chuỗi trao đổi cửa

Nếu kích thước của cửa sổ ứng dụng thay đổi, các ứng dụng phải thay đổi kích thước

bộ đệmchuỗi trao đổi, tái tạo xem làm mục tiêu Và sau đó trình bày các hình ảnh kết suất

Trang 22

1.Khối Môi trường Mapping

Bản đồ môi trường khối - đôi khi được gọi là bản đồ khối lập phương - là kết cấu

có chứa dữ liệu hình ảnh đại diện cho cảnh xung quanh một đối tượng,

như nếu đối tượng là ở trung tâm của một khối lập phương

Mỗi mặt của bản đồ môi trường khối bao gồm một lĩnh vực 90 độ nhìn trong ngang

và dọc,

và có sáu khuôn mặt mỗi bản đồ khối lập phương.Định hướng trong những mặt

được thể hiện trong hình minh họa sau đây

II Thiết lập môi

Trang 23

trường Mỗi mặt của khối lập phương được định hướng vuông góc với x / y, y / z,

hoặc x / z máy bay, trong không gian thế giới.Hình minh họa sau đây cho thấy làm thế nào mỗi máy bay tương ứng với một mặt

Trang 24

•Mipmapped Maps Môi trường Cubic

Bản đồ khối có thể được mipmapped Để tạo ra một bản đồ khối mipmapped, thiết lập các

tham số cấp độ của method CreateCubeTexture để mức mà bạn muốn Bạn có thể hình dung

các bề mặt được thể hiện trong biểu đồ dưới đây

Các ứng dụng tạo ra các bản đồ môi trường khối mipmapped có thể truy cập vào từng mặt

bằng cách gọi method GetCubeMapSurface Bắt đầu bằng cách thiết lập giá trị thích hợp

từ D3DCUBEMAP_FACES và liệt kê loại Tiếp theo, chọn mức độ bằng cách

thiết lập GetCubeMapSurface -tham số mức độ đến mức mipmap mà bạn muốn

Trang 25

• Tọa độ kết cấu cho Maps Môi trường khối

Kết cấu tọa độ của bản đồ môi trường khối không đơn giản như tọa độ u, style tọa độ v, như được sử dụng khi kết cấu tiêu chuẩn được áp dụng Trong thực tế, bản đồ môi trường khối không sử dụng kết cấu tọa độ ở tất cả Ở vị trí của một tập hợp các tọa độ kết cấu, bản đồ môi trường khối đòi hỏi một vector 3D Bạn cần phải xác định một định dạng đỉnh

thích hợp Ngoài báo cho hệ thống có bao nhiêu bộ kết cấu tọa độ sử dụng ứng dụng của bạn, bạn phải cung cấp thông tin về chi tiết yếu tố trong mỗi

bộ Direct3D cung

cấp D3DFVF_TEXCOORDSIZEN bộ macros cho mục đích này Các macros

chấp nhận một tham số duy nhất, xác định các chỉ số của các kết cấu phối hợp thiết lập mà kích thước đang được mô tả Trong trường hợp của một vector 3D, các mẫu được tạo ra bởi các macros D3DFVF_TEXCOORDSIZE3

Trang 26

/ / Tạo một mô tả định dạng đỉnh linh hoạt cho một đỉnh có chứa

/ / Một vị trí, bình thường, và một tập hợp các kết cấu tọa độ 3D

DWORD dwFVF = D3DFVF_XYZ | D3DFVF_NORMAL | D3DFVF_TEX1 | D3DFVF_TEXCOORDSIZE3 (0);

Ví dụ mã sau cho thấy cách vĩ mô này được sử dụng

Trang 27

1.2 Tạo Môi trường Bản đồ khối bề mặt

Bạn tạo ra một kết cấu bản đồ môi trường khối bằng cách gọi CreateCubeTexture

Ví dụ mã sau cho thấy cách ứng dụng của bạn có thể tạo ra

một bản đồ môi trường khối đơn giản.

/ / Init m_d3dDevice để trỏ đến một giao diện IDirect3DDevice9

LPDIRECT3DCUBETEXTURE9 m_pCubeMap;

m_d3dDevice-> CreateCubeTexture (256, 1, D3DUSAGE_RENDERTARGET,

D3DFMT_R8G8B8, D3DPOOL_DEFAULT,& m_pCubeMap);

Trang 28

•Truy cập môi trường bản đồ khối

Bạn có thể di chuyển giữa các khuôn mặt của một bản đồ môi trường khối

m_pCubeMap-> GetCubeMapSurface (D3DCUBEMAP_FACE_POSITIVE_Y, 0, & pFace2);

Tham số đầu tiên mà GetCubeMapSurface chấp nhận là một D3DCUBEMAP_FACES

giá trị liệt kê mô tả bề mặt kèm theo đó phương pháp này nên lấy Tham số thứ hai cho Direct3D mà mức độ của một kết cấu khối mipmapped để lấy.Tham số thứ ba được

chấp nhận là địa chỉ của giao diện IDirect3DSurface9 , tham số quan trọng cho bề mặt

kết cấu khối lập phương

Trang 29

•Ra vào Bản đồ Môi trường khối

Bạn có thể sao chép ảnh vào các mặt của bản đồ khối giống như bạn kết cấu

bất kỳ bề mặt hoặc đối tượng khác Điều quan trọng nhất để làm trước khi vẽ một

mặt được thiết lập các ma trận chuyển đổi để các ảnh được đặt đúng vị trí và điểm

theo hướng thích hợp cho mặt: về phía trước (+ z), hậu (-z),bên trái (-x) , bên phải (+ x), bên trên (+ y), hướng xuống (-y)

Ví dụ: chuẩn bị và thiết lập một ma trận điểm theo mặt được trả lại

/ / Init pCubeMap để trỏ đến một giao diện IDirect3DCubeTexture9

/ / Init d3dDevice để trỏ đến một giao diện IDirect3DDevice9

void RenderFaces()

{

/ / Lưu ma trận biến đổi của thiết bị

D3DXMATRIX matProjSave, matViewSave;

d3dDevice-> GetTransform (D3DTS_VIEW, & matViewSave;

d3dDevice-> GetTransform (D3DTS_PROJECTION, & matProjSave);

/ / Lưu trữ các buffer and z-buffer (bộ đệm)

LPDIRECT3DSURFACE9 pBackBuffer, pZBuffer;

d3dDevice-> GetRenderTarget (& pBackBuffer);

d3dDevice-> GetDepthStencilSurface (& pZBuffer);

Trang 30

Khi ảnh đang ở vị trí và các thiết lập ma trận chiếu, bạn có thể làm khung cảnh.Mỗi đối tượng trong khung cảnh nên được đặt như bình thường vị trí của nó.

Ví dụ mã sau, cung cấp cho đầy đủ, vạch ra nhiệm vụ này

/ / Lấy con trỏ đến bề mặt để trả cho nó

/ / Render cảnh ở đây d3dDevice-> EndScene ();

} / / Thay đổi mục tiêu làm cho trở lại bộ đệm chính

d3dDevice-> SetRenderTarget (pBackBuffer, pZBuffer);

SAFE_RELEASE (pBackBuffer); SAFE_RELEASE (pZBuffer);

/ / Khôi phục các ma trận chuyển đổi ban đầu

d3dDevice-> setTransform (D3DTS_VIEW, & matViewSave);

d3dDevice-> setTransform (D3DTS_PROJECTION, & matProjSave);

}

Trang 31

Các b ướ c thi t l p môi tr ế ậ ườ ng làm

Tải thư viện Direct3D tại địa chỉ

http://www.microsoft.com/en-US/download/details.aspx?id= 34429

Sau đó, ta tiến hành cài đặt như bình thường.

Để tạo một ứng dụng đơn giản:

Trong menu file ta chọn New -> Project.

Trang 32

Đặt tên cho ứng dụng là ThucHanhDirect3D và nhấn OK

Trang 33

- Để sử dụng các tiện ích của bộ thư viện DirectX :

- Chọn mục References trong khung bên phải Nhấn chuột phải và chọn Add References.

- Một cửa sổ được tạo ra, ta sẽ nhấn Browse và chọn đường dẫn tới thư viện Direct và Direct3D, rồi nhấn Add:

Sau đó, vào lớp game1.cs trong Project vừa tạo, khai báo các thư viện:

Using Microsoft.Direct;

Using Microsoft.Direct.Direct3D.

Trang 34

Môi tr ườ ng làm vi c v i Direct3D ệ ớ

Trang 35

 Xin chân thành c m n th y và các b n đã ả ơ ầ ạ

Ngày đăng: 23/05/2015, 17:27

TỪ KHÓA LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w