0

OpenGL を使用して画像に変更を加えたいと考えています。

というわけで、画像を読み込んだ後、テクスチャを用意して以下のコードを入れてみましたが、画像が三角形に変わりませんでした。

私は何を間違っていますか?

glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_NORMAL_ARRAY);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);

static const Vertex3D vertices[] = {
    {-1.0,  1.0, -0.0},
    { 1.0,  1.0, -0.0},
    { 0.0, -1.0, -0.0},

};
static const Vector3D normals[] = {
    {0.0, 0.0, 1.0},
    {0.0, 0.0, 1.0},
    {0.0, 0.0, 1.0},
};
static const GLfloat texCoords[] = {
    0.0, 1.0,
    1.0, 0.0,
    0.0, 0.0,
};

glLoadIdentity();
glTranslatef(0.0, 0.0, -3.0);




glBindTexture(GL_TEXTURE_2D, texture[0]);
glVertexPointer(3, GL_FLOAT, 3, vertices);
glNormalPointer(GL_FLOAT, 0, normals);
glTexCoordPointer(2, GL_FLOAT, 0, texCoords);
//initiate the drawing process, we want a triangle, start at index 0 and draw 3 vertices

glDrawArrays(GL_TRIANGLES, 0, 3);

glDisableClientState(GL_VERTEX_ARRAY);
glDisableClientState(GL_NORMAL_ARRAY);
glDisableClientState(GL_TEXTURE_COORD_ARRAY);`
4

1 に答える 1

0

あなたの glVertexPointer(3, GL_FLOAT, 3 , vertices);には驚いています。2 番目の 3 はストライド (数値間の一種の間隔) を示します... 3 ではなく 0 にすべきだと思います。

glVertexPointer(3, GL_FLOAT, 0 , 頂点);

実際、三角形が見えますか、それとも何も見えませんか?

幸運を!ピエール

OK: 私はあなたのコードを試したので、次のように言えます:

1) glVertexPointer(3, GL_FLOAT, 0 , 頂点); 3 の代わりに 0 のストライドは、明らかに 3 では機能しません (チェックしても無駄です): 値の間にギャップはありません。

2)ビューの初期化に起因する可能性があります(一般的な問題):投影とモデルビューの行列をどのように設定しますか? たとえば、三角形を見るには、

glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(45.0, 1.0, 1.0, 10.0); // field of view=45°, zNear..zFar = 1 to 10

glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glTranslatef(0.0, 0, -3.0);

つまり、実行する前に設定する行列を忘れずに指定し、適切に射影を設定してください: zNear <= min(your vertices.z), zFar >= max(your vertices.z) 、OpenGL 4 では、暗黙的な行列はなくなりました)

バグを見つけていただければ幸いです。

乾杯

于 2013-09-26T10:19:09.820 に答える