glDrawArray无效

时间:2013-09-26 05:39:10

标签: ios uiview opengl-es

我想使用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);`

1 个答案:

答案 0 :(得分:0)

我对你的glVertexPointer(3,GL_FLOAT, 3 ,顶点)感到惊讶;第二个3表示步幅(数字之间的间距)......我认为它应该是0而不是3。

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

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

祝你好运! 皮尔

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

1)你应该把glVertexPointer(3,GL_FLOAT, 0 ,顶点);大步为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(你的vertices.z),zFar> = max(你的vertices.z)(哦它结束了现在,使用OpenGL 4,不再有隐式矩阵)

我希望你找到这个bug。

干杯