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

Opengl 使用glArrayElement不会产生可见的输出,opengl,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

谁能告诉我这里出了什么错吗。它显示显示窗口,但不幸的是没有画三角形

#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(); 
}
顶点数组的类型为GLint[],因此初始化表达式中的所有浮点值或双精度值都将被截断为0,并且它也不会与glVertexPointer中给定的类型匹配,导致任何奇怪的结果,尽管在这种情况下,所有这些整数0的二进制表示可能也是浮点0.0f的二进制表示。鉴于在GLVERTExpinter中使用了GL_FLOAT,您可能认为它是GLfloat顶点[]


旁注:如注释中所述,glArrayElement函数非常无用,如果您已经在使用顶点数组,那么您实际上应该使用单个数组绘制调用来绘制它们,而不是在glBegin/glEnd块中进行一百万次glArrayElement调用,这是数组与glBegin/glEnd相比的全部用途和优势。因此,实际上您的glBegin/glEnd块可以被一个简单的glDrawArraysGL_三角形0,3;替换;。但是,通过上面提到的对数组类型的更正,它至少应该可以正常工作。

您的错误是使用了glArrayElement。说真的,千万不要把这个函数用于任何事情。但是它减少了调用函数的次数。所以你的意思是说使用glArrayElement我永远不会得到结果???这里有一些东西也可以减少函数调用的数量:使用glDrawArray或glDrawElements,而不是您正在做的事情。如果你要使用数组,那么就使用数组。@user2473729那么你的意思是说使用glarrayelment我永远不会得到结果你可以,这并不是说它不适用于glArrayElement。但是你应该停止尝试,因为在这个测试程序之后,你再也不想使用它了,考虑到没有人使用它,它很可能在驱动程序中被破坏。