1

OpenGLで立方体を作っています。通常、私は次のようなインスタントコードを使用しました:

glNormal3f(0.0,1.0,0.0);
glTexCoord2f(0.0f,0.0f);
glVertex3f( 0.5f, 0.5f,-0.5f);
...

これは少し非推奨です。今、キューブを処理するためにvertices[]andindices[]とを使用しています:glDrawElements

static float vertices[] = 
        {
    -0.5000, -0.5000,  0.5000,
     0.5000, -0.5000,  0.5000,
    -0.5000,  0.5000,  0.5000,
    -0.5000,  0.5000,  0.5000,
     0.5000, -0.5000,  0.5000,
     0.5000,  0.5000,  0.5000, 

    -0.5000, -0.5000, -0.5000,
    -0.5000,  0.5000, -0.5000,
     0.5000, -0.5000, -0.5000,
     0.5000, -0.5000, -0.5000,
    -0.5000,  0.5000, -0.5000,
     0.5000,  0.5000, -0.5000,

     0.5000, -0.5000, -0.5000, 
     0.5000,  0.5000, -0.5000, 
     0.5000, -0.5000,  0.5000, 
     0.5000, -0.5000,  0.5000, 
     0.5000,  0.5000, -0.5000, 
     0.5000,  0.5000,  0.5000, 

    -0.5000, -0.5000, -0.5000, 
    -0.5000, -0.5000,  0.5000, 
    -0.5000,  0.5000, -0.5000, 
    -0.5000,  0.5000, -0.5000, 
    -0.5000, -0.5000,  0.5000, 
    -0.5000,  0.5000,  0.5000, 

    -0.5000, -0.5000, -0.5000,
     0.5000, -0.5000, -0.5000,
    -0.5000, -0.5000,  0.5000,
    -0.5000, -0.5000,  0.5000,
     0.5000, -0.5000, -0.5000,
     0.5000, -0.5000,  0.5000,

    -0.5000,  0.5000, -0.5000,
    -0.5000,  0.5000,  0.5000,
     0.5000,  0.5000, -0.5000,
     0.5000,  0.5000, -0.5000,
    -0.5000,  0.5000,  0.5000,
     0.5000,  0.5000,  0.5000,

};

static byte indices[] = 
{
0,  1,  2, 
3,  4,  5,

18, 19, 20,
21, 22, 23,

12, 13, 14,
15, 16, 17,

6,  7,  8,
9, 10, 11,

30, 31, 32,
33, 34, 35,

24, 25, 26,
27, 28, 29
};

問題は、シーンが正しくなるように法線とテクスチャの座標を適切に設定する方法がわからないことです。指定されたデータでそれらをカウントするにはどうすればよいですか? 私はそうしようとしました:

glNormalPointer( GL_FLOAT, 0, normals);
glTexCoordPointer(2, GL_FLOAT, 0, texcoords);

そしてこのデータ:

static float normals[] =
{
    -1.0000, -1.0000,  1.0000,
     1.0000, -1.0000,  1.0000,
    -1.0000,  1.0000,  1.0000,
    -1.0000,  1.0000,  1.0000,
     1.0000, -1.0000,  1.0000,
     1.0000,  1.0000,  1.0000, 
};

static float texcoords[] =
{
    1.0000, 0.0000, 0.0000,
    1.0000, 1.0000, 0.0000,
    0.0000, 1.0000, 0.0000,
    0.0000, 0.0000, 0.0000
};

しかし、これでなんとか得られたのは、照明とテクスチャが壊れた醜い乱雑なシーンだけでした。

4

1 に答える 1

2

同じ数の位置、テキスト座標、および法線が必要です。配列のインデックスはindices、トリプレット (pos、texcoord、normal) を指しています。したがって、いくつかの texcoords または法線を複製する必要があります。

https://en.wikibooks.org/wiki/OpenGL_Programming/Modern_OpenGL_Tutorial_05

(インデックスは使用しませんが) http://www.opengl-tutorial.org/beginners-tutorials/tutorial-4-a-colored-cube/に基づくことができます

于 2013-10-15T12:39:46.710 に答える