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);感到惊讶 第二个 3 表示步幅(数字之间的一种间距)......我认为它应该是 0 而不是 3。

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

实际上,您看到三角形还是什么也没有?

祝你好运!皮埃尔

好的:我试过你的代码,所以我可以说:

1)你应该把 glVertexPointer(3, GL_FLOAT, 0 , vertices); 步幅为 0 而不是 3,显然不适用于 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 回答