簡體   English   中英

OpenGL紋理三角形

[英]OpenGL texturing Triangles

我有一個充滿三角形的varray,形成一個大的正方形。 我正在嘗試紋理這個大的正方形,而我所得到的(似乎)是一個像素列,然后在原始圖像上拉伸。

我用UV坐標(0,1),(0,0),(1,0)和(0,1),(1,1),(1,0)紋理每個直角三角形,具體取決於哪個方向三角形是。

渲染代碼。

    glBindTexture(GL_TEXTURE_2D, m_texture.id());

    //glEnableClientState(GL_INDEX_ARRAY);
    glEnableClientState(GL_VERTEX_ARRAY);
    glEnableClientState(GL_NORMAL_ARRAY);
    glEnableClientState(GL_TEXTURE_COORD_ARRAY);

    //glIndexPointer(GL_INT, 0, &m_indices[0]);
    glVertexPointer(3, GL_FLOAT, sizeof(VertexData), &m_vertexData[0].x);
    glNormalPointer(GL_FLOAT, sizeof(VertexData), &m_vertexData[0].nx);
    glTexCoordPointer(2, GL_FLOAT, sizeof(UVData), &m_uvData[0].u);

    glDrawElements(GL_TRIANGLES, m_indices.size(), GL_UNSIGNED_INT, &m_indices[0]);
    glBindTexture(GL_TEXTURE_2D, 0);

紋理是包裝模式是GL_CLAMP_TO_EDGE

截圖

編輯

輸出前兩個三角形我得到值...

三角1:

指數(0,1,31)

Vertex0(-15,0,-15),Vertex1(-15,0,-14),Vertex31(-14,0,-14)

UV(0,1),(0,0),(1,0)

三角2:

指數(0,30,31)

Vertex0(-15,0,-15),Vertex30(-14,0,-15)Vertex31(-14,0,-14)

UV(0,1),(1,1),(1,0)

對於后代,完整的代碼在這里

兩個三角形組成一個正方形,從左上角到右下角切割對角線。

不要使用glIndexPointer,不是你想的那樣,用於顏色索引模式,做索引網格只需使用glDrawElements。

看起來您將UV數據與索引相關聯,而不是與頂點相關聯。 UV數據是頂點數據的一部分,因此您應該將其打包在VertexData對象中,而不是將其分開。 你可以將它分開,但每個頂點需要一個,而不是每個索引一個。

暫無
暫無

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

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