2013-12-21 14 views
0

假設我想在Direct3D中渲染金字塔。我在我的頂點緩衝區以下的頂點:在Direct3D中指定索引的正確方法

Vertex vertices[] = { 
    {XMFLOAT3(+1.0f,0.0f,+1.0f),(const float*)&Colors::Green}, 
    {XMFLOAT3(+1.0f,0.0f,-1.0f),(const float*)&Colors::Green}, 
    {XMFLOAT3(-1.0f,0.0f,-1.0f),(const float*)&Colors::Green}, 
    {XMFLOAT3(-1.0f,0.0f,+1.0f),(const float*)&Colors::Green}, 
    {XMFLOAT3(0.0f,1.5f,0.0f),(const float*)&Colors::Blue} 
} 

頂點在哪裏是一個簡單的struct帶的位置和顏色值。

現在在我的索引緩衝區中,指定這些頂點以繪製金字塔的正確順序是什麼,因此它的所有三角形都面向前方?每當我嘗試對我而言似乎合乎邏輯的事物時,我最終會得到一些面向錯誤方向的三角形。

+0

如果所有三角形都面向前方,則不會是金字塔;-) –

回答

1

那怎麼我通常這樣做:

  • 繪製模型上一張紙,在3D網格編輯器,或者只是Google up an image
  • 鴻溝非三角形(如金字塔的底座正方形)到三角形
  • 連續分配號碼,並將其寫入各頂點附近從正面臉,可見三角形
  • 開始索引,以便,這取決於期望的渲染器(例如,以順時針方向)
  • 然後以相反的順序(在我們的例子中逆時針)背面指定三角形 - 或者 - 將網格旋轉180度(或者在心理上繞着它旋轉),「看它的背面」並且直接索引三角形順序(順時針)。

作爲替代方案:

  • 獲得3D網格編輯器,你畫的模型,保存在任何文本格式(例如.OBJ),用文本編輯器打開它,找到索引數據
  • Google for it

當然,您的渲染器,尤其是輸入彙編器的基本類型(如三角形列表或三角形條)和剔除必須正確設置,才能以正確的方式繪製模型。

希望它有幫助!

相關問題