簡體   English   中英

簡化紋理和角坐標'openGL

[英]simplifying texture and corner coordinates 'openGL

這是我的骰子(一個被骰子紋理覆蓋的立方體)的坐標部分。 我已經在某些代碼中看到了可以省略指向相同位置的公共坐標嗎? 無論如何,我的形狀都會變得混亂! 如何簡化呢?

這是我的代碼->立方體角坐標,紋理坐標和頂點索引

final float pt2[] = new float[] { 
                0, 0, 0,
                0, 1, 0,
                1, 0, 0, 
                1, 1, 0,

                0, 0, 1,
                0, 1, 1, 
                1, 0, 1,
                1, 1, 1,

                1, 1, 1, /* 8 */
                1, 1, 0,
                0, 1, 0, 
                0, 1, 1,

                1, 0, 1, 
                1, 0, 0,
                0, 0, 0,
                0, 0, 1,

                0, 0, 1, /* 16 */
                0, 1, 1,
                1, 1, 1, 
                1, 0, 1,

                1, 0, 0,
                0, 0, 0, 
                0, 1, 0, 
                1, 1, 0 };
        final float texture[] = new float[] { 
                1f, 0.66f, 
                0.66f, 0.66f,
                0f,0.33f, 
                0.33f, 0.33f,

                1f, 0.33f, 
                0.66f, 0.33f,
                0.0f, 0.0f,
                0.33f, 0f,

                0.33f, 0f,
                0.33f, 0.33f,
                0.66f, 0.33f,
                0.66f, 0f,

                0.33f, 0.33f,
                0.33f, 0.66f,
                0.66f, 0.66f,
                0.66f, 0.33f,

                0.66f, 0f,
                0.66f, 0.33f,
                1f, 0.33f, 
                1f, 0f,

                0f, 0.33f,
                0f, 0.66f,
                0.33f, 0.66f,
                0.33f, 0.33f,

        };

        final byte[] vertexIndex = new byte[] { 
                6, 2, 3,7, //1
                5, 1, 0, 4, //2
                8,9,10, 11, //3
                15, 14, 13,12, //4
                20, 21,22, 23, //5
                16, 19, 18, 17 }; //6

是的,事實上,您要在此處進行的操作絕對是正確的方法-僅指定每個頂點一次。 它不僅節省了內存,而且避免了細微的視覺瑕疵,其中兩個或多個頂點(應該位於同一位置)不具有完全相同的浮點值。

這是我從代碼庫和 DX教程中獲得的一個示例。

您正在為頂點坐標和紋理坐標使用單獨的數據結構,而此處它們都被卡在一起,但是想法是相同的。

這里重要的一點是,頂點表中只有8個條目-恰好是一個立方體中的頂點數-沒什么多余的。 您可以在索引緩沖區中有多個對同一個頂點的引用,但這就是您想要的-重用同一個頂點條目。

struct MyVertex
{
    float x, y, z;
    float t, v;
};

// the cube corners, note that there are only 8 entries
// in table - no duplicates

MyVertex vx[] = 
{
    { 0.0f, 0.0f, 0.0f, 0.0f,1.0f },    // one corner of the cube
    { 0.0f, 1.0f, 0.0f, 0.0f,0.0f },
    { 1.0f, 1.0f, 0.0f, 1.0f,0.0f },
    { 1.0f, 0.0f, 0.0f, 1.0f,1.0f },
    { 0.0f, 0.0f, 1.0f, 0.0f,0.0f },
    { 1.0f, 0.0f, 1.0f, 0.0f,1.0f },
    { 1.0f, 1.0f, 1.0f, 0.0f,0.0f },
    { 0.0f, 1.0f, 1.0f, 0.0f,1.0f }
};

// index buffer that points back into vx[]

short indexBuffer[] = 
{
    0,1,2, 2,3,0,   // cube face 0 (2 tris here)
    4,5,6, 6,7,4,   // 1
    0,3,5, 5,4,0,   // 2
    3,2,6, 6,5,3,   // 3
    2,1,7, 7,6,2,   // 4
    1,0,4, 4,7,1    // 5
};

暫無
暫無

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

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