我正在做以下事情:
static GLfloat vertices[3][3] =
{
{0.0, 1.0, 0.0},
{1.0, 0.0, 0.0},
{-1.0, 0.0, 0.0}
};
glColor4ub(255, 0, 0, 255);
glEnableClientState(GL_VERTEX_ARRAY);
glVertexPointer(3, GL_FLOAT, 0, vertices);
glDrawArrays(GL_TRIANGLES, 0, 9);
glDisableClientState(GL_VERTEX_ARRAY);
这样可行:
http://dl.dropbox.com/u/41764/posts/Screen%20shot%202010-03-28%20at%2020.04.56.png
但是,如果我从顶点删除static
并因此在每次渲染时在堆栈上重新创建数据,我会得到以下内容:
http://dl.dropbox.com/u/41764/posts/Screen%20shot%202010-03-28%20at%2020.06.38.png
在模拟器和设备上都会发生这种情况。
我打电话给glDrawArrays
后,我应该保留变量吗?
答案 0 :(得分:3)
你看到奇怪结果的原因是因为你没有画出你认为的那样。
glDrawArrays(GL_TRIANGLES, 0, 9);
这意味着绘制9个顶点,因此绘制3个三角形。你的数组中只有3个顶点,所以其他2个三角形最终会被猜测。你可以在第二张图片中看到你确实有超过1个三角形...它最终使用的数据是当时堆栈上的其他内容。
glDrawArrays会在通话时转接,我认真地怀疑iPhone不符合此要求。这是非常基本的GL,(我相信)会进行一致性测试。
答案 1 :(得分:1)
您正在两个案例中呈现未初始化的数据。恰好在static
案例中看起来是正确的。
glDrawArrays
的第三个参数是顶点的数量(在您的情况下应为3
,因为您试图绘制一个三角形。)
你已经告诉GL你要为每个顶点指定3 GLfloat
(glVertexPointer
的第一个参数)。因此GL可以计算出预期的GLfloat
总数。
这应该有效:
GLfloat vertices[3][3] =
{
{0.0, 1.0, 0.0},
{1.0, 0.0, 0.0},
{-1.0, 0.0, 0.0}
};
glColor4ub(255, 0, 0, 255);
glEnableClientState(GL_VERTEX_ARRAY);
glVertexPointer(3, GL_FLOAT, 0, vertices);
glDrawArrays(GL_TRIANGLES, 0, 3);
glDisableClientState(GL_VERTEX_ARRAY);