1

私はスカイボックス (6 つの面のそれぞれに異なるテクスチャを持つ立方体) を作成しています。

頂点を定義します:

const float vertices[8u][3u] = {
    {-1.0f, -1.0f, -1.0f},
    {-1.0f, -1.0f, 1.0f},
    {-1.0f, 1.0f, -1.0f},
    {-1.0f, 1.0f, 1.0f},
    {1.0f, -1.0f, -1.0f},
    {1.0f, -1.0f, 1.0f},
    {1.0f, 1.0f, -1.0f},
    {1.0f, 1.0f, 1.0f}
};

頂点配列に基づいて三角形を定義します (ES バージョンでは四角形は使用できません)。

const unsigned short elements[8u][3u] = {
    {4u, 6u, 2u},
    {4u, 0u, 2u},
    {6u, 3u, 2u},
    {6u, 3u, 7u},
    {7u, 1u, 5u},
    {7u, 1u, 3u},
    {5u, 0u, 4u},
    {5u, 0u, 1u}
};

テクスチャ座標を定義する必要があることを理解したので、さまざまなことを試しましたが、今のところ次のようになります。

float texCoords[4u][2u] = {
    {0.0f, 0.0f},
    {1.0f, 0.0f},
    {1.0f, 1.0f},
    {0.0f, 1.0f}
};

編集: スカイボックス自体はまったく表示されません。テクスチャが奇妙な方法で繰り返される 2D フラット イメージしか表示されません。絶対に立方体はありません

描画部分は機能しています。私の問題はテクスチャ座標に基づいていると思います。よろしいですか? 私は何を間違えましたか?

4

2 に答える 2

0

私は正しいですか?私は何を間違えたのですか?

私の水晶玉を見​​つめている…いいえ、あなたの問題が何であるかわかりません。あなたは私たちに教えていません。

とにかく、テクスチャ座標は確かに間違っています。配列には 4 つしか含まれていません。しかし、8 つの頂点の立方体があります。ただし、これをスカイボックスにするには、24 頂点の立方体が必要です。これは、テクスチャ座標が頂点の一部であり、6 つのテクスチャで構成されるスカイ ボックスの一部の頂点でテクスチャ座標を共有できないためです。

ただし、代わりにキューブマップ テクスチャを使用することをお勧めします。これには、既に持っている頂点座標をテクスチャ座標にも使用できるという大きな利点があります。

于 2012-09-19T12:48:12.063 に答える
-1

申し訳ありませんが、私の質問は明確ではありませんでした。テクスチャ座標の考え方がよくわかりませんでした。今、私はやったと思います:各面をテクスチャでどれだけ埋めたいかを伝えます。私の例は、フルフィルです。誰かを助けるかもしれない場合に備えて、これが私の新しい(似ている)作業コードです:

//The 24 vertex of the 3d cube (the skybox)
static const float vertices[24u][3u] = {
        {-1.0f, -1.0f, -1.0f}, //face 1 (front)
        {-1.0f, 1.0f, -1.0f},
        {1.0f, -1.0f, -1.0f},
        {1.0f, 1.0f, -1.0f},

        {1.0f, 1.0f, 1.0f}, //face 2 (back)
        {1.0f, -1.0f, 1.0f},
        {-1.0f, 1.0f, 1.0f},
        {-1.0f, -1.0f, 1.0f},

        {-1.0f, -1.0f, -1.0f}, //face 3 (left)
        {-1.0f, -1.0f, 1.0f},
        {-1.0f, 1.0f, -1.0f},
        {-1.0f, 1.0f, 1.0f}, 

        {1.0f, 1.0f, 1.0f}, //face 4 (right)
        {1.0f, 1.0f, -1.0f},
        {1.0f, -1.0f, 1.0f},
        {1.0f, -1.0f, -1.0f},

        {-1.0f, 1.0f, -1.0f}, // face 5 (up)
        {-1.0f, 1.0f, 1.0f},
        {1.0f, 1.0f, 1.0f},
        {1.0f, 1.0f, -1.0f},

        {1.0f, -1.0f, 1.0f}, //face 6 (bot)
        {1.0f, -1.0f, -1.0f},
        {-1.0f, -1.0f, -1.0f},
        {-1.0f, -1.0f, 1.0f},
};

//Coordinate of the textures
float texCoords[24u][2u] = {
        {0.0f, 0.0f},
        {0.0f, 1.0f},
        {1.0f, 1.0f},
        {1.0f, 0.0f},

        {0.0f, 0.0f},
        {0.0f, 1.0f},
        {1.0f, 1.0f},
        {1.0f, 0.0f},

        {0.0f, 0.0f},
        {0.0f, 1.0f},
        {1.0f, 1.0f},
        {1.0f, 0.0f},

        {0.0f, 0.0f},
        {0.0f, 1.0f},
        {1.0f, 1.0f},
        {1.0f, 0.0f},

        {0.0f, 0.0f},
        {0.0f, 1.0f},
        {1.0f, 1.0f},
        {1.0f, 0.0f},

        {0.0f, 0.0f},
        {0.0f, 1.0f},
        {1.0f, 1.0f},
        {1.0f, 0.0f},        
};

//Defining triangles based on the vertice array indexes
const unsigned short elements[12u][3u] = {
        {0, 2, 1},
        {2, 1, 3},

        {4, 5, 6},
        {5, 6, 7},

        {8, 9, 10},
        {9, 10, 11},

        {12, 13, 14},
        {13, 14, 15},

        {16, 17, 18},
        {17, 18, 19},

        {20, 21, 22},
        {21, 22, 23}
};
于 2012-09-20T07:42:48.417 に答える