2016-01-18 70 views
0

我目前正在學習的DirectX的基礎知識,我需要一些簡單的幫助正方形。創建在DirectX

我做了一個三角形,將打印出沒有任何問題,什麼那麼,但當我嘗試另一個角落添加到三角形,使之成爲方形它不會工作。我試圖改變我創造角落的順序,但這個最有意義並且不起作用。如果有人能看到它並告訴我我做錯了什麼,我會很高興。謝謝!!

void CreateTriangleData() 
{ 
    struct TriangleVertex 
    { 
     float x, y, z; 
     float r, g, b; 
    }; 

    TriangleVertex triangleVertices[4] = 
    { 
     0.5f, -0.5f, 0.0f,  //v1 
     1.0f, 1.0f, 0.0f,     //v1 color 

     -0.5f, -0.5f, 0.0f,  //v2 
     0.0f, 1.0f, 0.0f,     //v2 color 

     0.5f, 0.5f, 0.0f,  //v0 pos 
     1.0f, 0.0f, 0.0f,     //v0 color 

     -0.5f, 0.5f, 0.0f,  //v3 
     0.0f, 0.0f, 1.0f 
    }; 

    D3D11_BUFFER_DESC bufferDesc; 
    memset(&bufferDesc, 0, sizeof(bufferDesc)); 
    bufferDesc.BindFlags = D3D11_BIND_VERTEX_BUFFER; 
    bufferDesc.Usage = D3D11_USAGE_DEFAULT; 
    bufferDesc.ByteWidth = sizeof(triangleVertices); 

    D3D11_SUBRESOURCE_DATA data; 
    data.pSysMem = triangleVertices; 
    gDevice->CreateBuffer(&bufferDesc, &data, &gVertexBuffer); 
} 

回答

0

如果不使用索引,即你與Draw(),而不是DrawIndexed()繪圖,你應該投入到頂點緩衝區中的所有促成兩個三角形(即6個頂點)的頂點。如果您正在繪製四邊形,則會出現兩對重複的頂點。

爲了避免重複一個可以使用索引緩衝器。

典型的疑難雜症:你應該保持纏繞在頂點緩衝頂點的順序,以你的三角形是可見的(請參見:Back-face culling

enter image description here

參見:

0

您需要更改拓撲以使其工作。

讓你在6個頂點情況下需要你TRIANGLESTRIP拓撲中的4個頂點情況和TRIANGLELIST只使用頂點緩衝。 TRIANGLESTRIP將從頂點1,2和3創建一個三角形,並從3,4和1頂點創建第二個三角形,這兩個三角形將變成一個矩形。 TRIANGLELIST將使從頂點1,2和3和第二個三角形從4,5和6,在這種情況下則需要給出兩個以上頂點。

不同類型的拓撲這裏列出 https://msdn.microsoft.com/en-us/library/windows/desktop/ff728726(v=vs.85).aspx

第二個選擇是使用索引緩衝區,而不是其在這裏解釋https://msdn.microsoft.com/en-us/library/windows/desktop/ff476897%28v=vs.85%29.aspx

頂點緩衝
相關問題