簡體   English   中英

Direct3D 9.0交錯非fvf頂點緩沖區

[英]Direct3D 9.0 Interleaved non-fvf Vertex Buffer

我試圖將頂點數據交錯到std矢量模板的STL容器中。 我已經用OpenGL成功完成了這個,我的網格界面的源代碼可以在線獲取我的開源項目... https://github.com/RobertBColton/enigma-dev/blob/master/ENIGMAsystem/SHELL/Graphics_Systems /OpenGL3/GL3model.cpp

現在我想使用DirectX執行相同的方法,並且已經設法通過邏輯xor'ing我的FVF DWORD以及我擁有的每個頂點的組件來實現。 然而,當網格僅包含頂點和法線時,這就是網格當前渲染的內容:

在此輸入圖像描述

現在DX讓我很難做到我在OGL中做的事情,我已經檢查,雙重檢查,並一遍又一遍地檢查,我的字節對齊在緩沖區內是完美的。 我想做的事情可以通過OpenGL Wiki更好地解釋... / wiki / Vertex_Specification_Best_Practices#Formatting_VBO_Data

現在我不想實現着色器來實現這一點。 如果有人可以簡單地向我提供我想要做的任何指示,或者指向我在Direct3D 9中執行此示例或教程的方向,它將真正幫助我,因為這似乎不是DX中非常常見的做法。

仔細檢查一下你在這里想做什么之后,我相信這就是你想要的:

D3DVERTEXELEMENT9 custom_vertex [] =
{
  { 0,  0, D3DDECLTYPE_FLOAT3,   D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_POSITION, 0 },
  { 0, 12, D3DDECLTYPE_FLOAT3,   D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_NORMAL,   0 },
  { 0, 24, D3DDECLTYPE_FLOAT2,   D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_TEXCOORD, 0 },
  { 0, 32, D3DDECLTYPE_D3DCOLOR, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_COLOR,    0 },
  D3DDECL_END()
};

此數據結構的格式與OpenGL的頂點指針系統非常相似,您必須傳遞偏移量,組件的大小和數量(例如D3DDECLTYPE_FLOAT3 )。 您還包括該字段的用途(例如D3DDECLUSAGE_COLOR )。 與OpenGL不同,D3D可以通過使用D3DDECL_END()宏來為您計算步幅。

IDirect3DVertexDeclaration9* vertex_declaration;
d3dDevice->CreateVertexDeclaration (custom_vertex, &vertex_declaration);

現在你應該使用這個聲明去創建和填充你的頂點緩沖區。 您可以根據需要使用不同的D3DVERTEXELEMENT9數組添加/刪除元素。

請記住使用DWORD(D3D)或4 ubyte(OpenGL)顏色。 沒有理由在90%的時間內使用浮點顏色。 它們只是浪費存儲和內存帶寬。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM