Apple OpenGL:为什么我用glVertexAttribPointer绘制多边形只是折叠一个正方形?

时间:2011-11-26 15:23:37

标签: opengl polygon

警告:尝试学习OpenGL ......

我用以下代码绘制了一个正方形。

    static const GLfloat squareVertices[] = {
        -0.5f, -0.33f, 
         0.5f, -0.33f,
        -0.5f,  0.33f, 
         0.5f,  0.33f,
    };

...

        glVertexAttribPointer(ATTRIB_VERTEX, 2, GL_FLOAT, 0, 0, squareVertices);
        glEnableVertexAttribArray(ATTRIB_VERTEX);
...

        glVertexPointer(2, GL_FLOAT, 0, squareVertices);

很自然地,我想添加两个顶点并获得六边形。相反,我有像折纸折叠的正方形:

    static const GLfloat hexagonVertices[] = {
        -0.5f, -0.33f, 
        +0.0f, -0.66f, 
        +0.5f, -0.33f,
        +0.75f, +0.33f,
        -0.1f, +0.5f, 
        +0.25f, +0.33f,
    };

...

        glVertexAttribPointer(ATTRIB_VERTEX, 3, GL_FLOAT, 0, 0, hexagonVertices);
        glEnableVertexAttribArray(ATTRIB_VERTEX);

...

        glVertexPointer(3, GL_FLOAT, 0, hexagonVertices);

我甚至尝试更改顶点以影响形状。我可以把方形变成一个不规则的四边形多边形,我可以歪斜“六边形”,但它仍然只是一张折叠的纸。

我可以这样做吗?

首选的替代方式是什么?

1 个答案:

答案 0 :(得分:1)

您的问题来自于glVertexAttribPointer的第二个参数中发送值3

这告诉opengl每个顶点使用3个坐标而不是你想要的两个坐标。由于你有12个浮点数,这将成为4个顶点,因此是正方形。

编辑:哦,你需要glVertexPointer的第一个参数也是2。