1

有人可以告诉我这里有什么错误。它显示显示窗口,但不幸的是没有绘制三角形。

#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(); 
}
4

1 回答 1

0

您的vertices数组是 type GLint[],因此初始化表达式中的所有浮点(或者更确切地说是双精度)值都将被截断,0并且它不会与任何一个给出的类型匹配glVertexPointer,从而导致任何奇怪的结果(尽管在这种情况下正是二进制表示所有这些整数0s 可能也是 float 的二进制表示形式0.0f)。鉴于使用GL_FLOATinglVertexPointer你可能意味着它是GLfloat vertices[].

(旁注:如评论中所述,该glArrayElement函数非常没用,如果您已经在使用顶点数组,那么您实际上应该使用单个数组绘制调用而不是块glArrayElement内的一百万次调用来绘制它们glBegin/glEnd,这就是全部目的和数组相比的优势glBegin/glEnd。所以实际上你的glBegin/glEnd块可以用一个简单的替换glDrawArrays(GL_TRIANGLES, 0, 3);。但是通过上面提到的数组类型的更正,它至少应该可以正常工作。)

于 2013-06-17T09:16:01.740 回答