การสร้าง object ที่สำคัญของ Direct 3D


สร้าง Direct 3D กัน

LPDIRECT3D9g_pD3D= NULL;
LPDIRECT3DDEVICE9g_pD3DDevice = NULL;

g_pD3D = Direct3DCreate9( D3D_SDK_VERSION );
if( g_pD3D == NULL ) {
return;
}

สร้างตัว Device ของ Direct 3D

D3DDISPLAYMODE d3ddm;
if( FAILED( g_pD3D->GetAdapterDisplayMode( D3DADAPTER_DEFAULT, &d3ddm ) ) ) {
return;
}
HRESULT hr;
if( FAILED( hr = g_pD3D->CheckDeviceFormat( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, d3ddm.Format, D3DUSAGE_DEPTHSTENCIL,D3DRTYPE_SURFACE, D3DFMT_D16 ) ) )
{
if( hr == D3DERR_NOTAVAILABLE )
return;
}
D3DCAPS9 d3dCaps;
if( FAILED( g_pD3D->GetDeviceCaps( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, &d3dCaps ) ) ) {
return;
}
DWORD dwBehaviorFlags = 0;
if( d3dCaps.VertexProcessingCaps != 0 )
dwBehaviorFlags |= D3DCREATE_HARDWARE_VERTEXPROCESSING;
else
dwBehaviorFlags |= D3DCREATE_SOFTWARE_VERTEXPROCESSING;

D3DPRESENT_PARAMETERS d3dpp;
memset(&d3dpp, 0, sizeof(d3dpp));
d3dpp.BackBufferFormat = d3ddm.Format;
d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
d3dpp.Windowed = TRUE;
d3dpp.EnableAutoDepthStencil = TRUE;
d3dpp.AutoDepthStencilFormat = D3DFMT_D16;
d3dpp.PresentationInterval = D3DPRESENT_INTERVAL_IMMEDIATE;
d3dpp.BackBufferWidth = 1280;
d3dpp.BackBufferHeight = 720;
d3dpp.hDeviceWindow = g_hWnd;
if( FAILED( g_pD3D->CreateDevice( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, g_hWnd, dwBehaviorFlags, &d3dpp, &g_pD3DDevice ) ) ) {
return;
}

Device ของ Direct 3D เปรียบเสมือนเป็นหน้าจอที่เราจะใช้แสดงผลนะครับ ในส่วนนี้จะให้ดูในส่วนที่สำคัญก็คือ

  • Windowed เป็นการบอกว่าจะแสดงผลเป็นแบบ window mode หรือ fullscreen mode
  • BackBufferWidth คือขนาดความกว้างของ back buffer
  • BackBufferHeight คือขนาดความสูงของ back buffer

ในส่วนนี้เราจะเห็นส่วนประกอบของการสร้าง device ขึ้นมา ส่วนหนึ่ง คือ buffer
ระบบ buffer นั่นคือ เมื่อเราต้องการ render ข้อมูลภาพต่าง ๆ เราจะได้ออกมาเป็นจุดสี ที่มีจำนวนจุดตามขนาดของ buffer เรีนกว่า color buffer นอกจากนี้ยังมี depth buffer ที่ใช้เก็บค่าความลึกของจุดแต่ละจุดไว้ หากในการ render มีการตรวจสอบความลึกด้วย เราจะไม่สามารถ render จุดสีที่มีความลึกมากกว่าจุดเดิมได้ ส่วน stencil buffer นั้นเป็น buffer ที่ใช้กรองการ render คล้ายกับ depth แต่ถูกสร้างมาเพื่อช่วยการ render ให้ดีขึ้น ถ้าศึกษาเทคนิดการ render เงา (shadow volume) ก็จะเห็นการใช้ buffer ชนิดนี้

คำสำคัญ (Tags): #c++#directx#game
หมายเลขบันทึก: 585008เขียนเมื่อ 2 กุมภาพันธ์ 2015 15:13 น. ()แก้ไขเมื่อ 2 กุมภาพันธ์ 2015 15:13 น. ()สัญญาอนุญาต: ครีเอทีฟคอมมอนส์แบบ แสดงที่มา-ไม่ใช้เพื่อการค้า-ไม่ดัดแปลง


ความเห็น (0)

ไม่มีความเห็น

พบปัญหาการใช้งานกรุณาแจ้ง LINE ID @gotoknow
ขอแนะนำ ClassStart
ระบบจัดการการเรียนการสอนผ่านอินเทอร์เน็ต
ทั้งเว็บทั้งแอปใช้งานฟรี