使用glArrayElement不会产生可见的输出

时间:2013-06-11 09:04:19

标签: opengl

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

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

1 个答案:

答案 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}替换但是通过上面提到的数组类型的修正,它至少应该正常工作。)