有人可以告诉我这里有什么错误。它显示了显示窗口,但遗憾的是没有绘制三角形。
#include<glut.h>
GLint vertices[] ={ /*vertex array */
0.25, 0.25,
-0.9, 0.8,
0.5, -0.5
-0.2, -0.8
};
GLfloat colors[]={ /*color array*/
1.0, 0.0, 0.0,
0.0, 1.0, 0.0,
0.0, 0.0, 1.0,
1.0, 1.0, 0.0
};
void display(){
glClearColor(0.0, 0.0, 0.0, 0.0);
glClear(GL_COLOR_BUFFER_BIT);
glEnableClientState(GL_COLOR_ARRAY); /* enabling color array*/
glEnableClientState(GL_VERTEX_ARRAY); /*enableing vertex array */
glColorPointer(3, GL_FLOAT, 0, colors);
glVertexPointer(2, GL_FLOAT, 0, vertices);
glBegin(GL_TRIANGLES); /* dereferencing */
glArrayElement(0);
glArrayElement(1);
glArrayElement(2);
glEnd();
glDisableClientState(GL_COLOR_ARRAY);
glDisableClientState(GL_VERTEX_ARRAY);
glFlush();
}
void main() {
glutInitDisplayMode(GLUT_RGBA);
glutInitWindowPosition(200, 200);
glutInitWindowSize(300,300);
glutCreateWindow("My application");
glutDisplayFunc(display);
glutMainLoop();
}
答案 0 :(得分:0)
您的vertices
数组的类型为GLint[]
,因此初始化表达式中的所有float(或更确切地说是double)值都将被截断为0
,并且它将与在glVertexPointer
中给出的类型,导致任何奇怪的结果(尽管在这种情况下,所有那些整数0
的二进制表示也可能是浮点0.0f
的二进制表示)。鉴于在GL_FLOAT
中使用glVertexPointer
,您可能认为它是GLfloat vertices[]
。
(旁注:如评论中所述,glArrayElement
函数非常无用,如果您已经在使用顶点数组,那么实际应该使用单个数组绘制调用而不是一百万{{1}来绘制它们。 1}}调用glArrayElement
块内部,与glBegin/glEnd
相比,这是数组的全部目的和优势。事实上,您的glBegin/glEnd
块可以用简单的{{1}替换但是通过上面提到的数组类型的修正,它至少应该正常工作。)