2011-11-26 24 views
1

警告:试图学习OpenGL ...Apple OpenGL:为什么我用glVertexAttribPointer绘制一个多边形只是折叠一个正方形?

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

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

您的问题来自于glVertexAttribPointer

的第二个参数发送的值3这就告诉OpenGL使用每个顶点的3个坐标,而不是你希望两个。由于你有12个浮点,所以它变成了4个顶点,因此是方形。

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

+0

谢谢 - 我以为我原本保持参数为“2”,但我一次改变多件事。我现在有一个方形,五角形和六角形。我仍然不太清楚顶点的顺序 - 我一直在思考一个路径。我必须继续阅读...... – mobibob