我想使用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);`
答案 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。
干杯