glDrawArrays在原点绘制随机点?

时间:2012-03-26 14:54:46

标签: opengl

我有三个通过三角形扇形绘制的对象,但是一旦我设置了我的glVertexPointer并调用了glDrawArrays,就会在绘制的原点上始终有一个点,至少我没有指定。以下是我绘制场景的方法。 DrawScene函数设置为每30 ms调用一次的计时器。

    // initialize openGL scene
    InitializeGL(){
    glViewport(0, 0, 800, 600); 
    glEnable(GL_MULTISAMPLE);
    glClearDepth(1.0f);
    glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_FASTEST);
    glShadeModel(GL_FLAT);
    glEnable(GL_DEPTH_TEST);
    glEnable(GL_CULL_FACE); 
    glClearColor(0.0f,0.0f,0.0f,0.0f);
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    setUpView() // optional makes a call to glRotate() and glTranslate() in MODELVIEW matrix mode

    drawAxis() //optional method to draw x,y,z axis

    startDrawSceneTimer() // method that just starts the DrawScene timer to 30ms

    }


    DrawScene()
    {
        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
        glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
        glEnable(GL_VERTEX_ARRAY);
        //poly2 is a 7 point sided polygon, array is pointX, pointY, pointZ of each vertex
        GLfloat poly2 [21] ={ -761.805 , 0.0 , 165.184 , -750.39 , 0.0 , 160.456 ,
        -745.47 , 0.0 , 160.456 , -745.47 , 0.0 , 170.298 , -749.425 , 0.0 , 177.359 ,
        -755.31 , 0.0 , 180.141 , -765.155 , 0.0 , 177.421};
        glVertexPointer(3,GL_FLOAT,0,poly2);
        glDrawArrays(GL_TRIANGLE_FAN,0,21);
        glDisable(GL_VERTEX_ARRAY);
    }

只有在图像的左下象限中才有一个多边形,类似于六边形。与原点的长连接是异常。我的顶点“poly2”数组不包含顶点(0,0,0)。

以下是我得到的图片:

当我将GL_TRIANGLE_FAN切换到GL_POINTS时,也会绘制原点上的点。我在代码中的其他地方找不到任何创建要点的内容。我也尝试删除用于绘制x,y和z轴的代码,但它没有改变问题。

1 个答案:

答案 0 :(得分:5)

您将错误的参数传递给glDrawArrays。最后一个参数不应该是数组中的浮点数,而应该是顶点数。由于你使用x,y,z顶点格式,你应该通过21/3 = 7 。现在,函数调用将读取数组的内存,这可能会导致您遇到的奇怪行为。

请参阅以下示例:http://forums.toucharcade.com/showthread.php?p=497677