Iphone 如果变量不是静态的,则图像已损坏

Iphone 如果变量不是静态的,则图像已损坏,iphone,opengl-es,Iphone,Opengl Es,我正在做以下工作: 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

我正在做以下工作:

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);
这很好用:

但是,如果我从顶点移除
static
,并因此在每次渲染时在堆栈上重新创建数据,我会得到以下结果:

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);

这在模拟器和设备上都会发生


调用
glDrawArrays
后是否应该保留变量?

您之所以看到奇怪的结果,是因为您没有按照自己的想法绘制

glDrawArrays(GL_TRIANGLES, 0, 9);
这意味着绘制9个顶点,因此绘制3个三角形。在数组中只声明了3个顶点,因此其他2个三角形最终将是什么是任何人的猜测。你可以在第二张图中看到,你确实有不止一个三角形。。。它最终使用的数据是当时堆栈上的任何其他数据


glDrawArrays确实是随叫随到的,我严重怀疑iPhone在这方面不兼容。这确实是一个基本的GL,我相信它会得到一致性测试。

在这两种情况下都会呈现未初始化的数据。在
静态
情况下,它恰好看起来是正确的

glDrawArrays
的第三个参数是顶点数(在本例中,顶点数应为
3
,因为您正在尝试绘制单个三角形)

您已经告诉GL您正在为每个顶点指定3
GLfloat
glVertexPointer
的第一个参数)。因此,总账可以计算出预期的
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);

当然,你是对的。抱歉没有注意到这一点。如果可以,我会删除我的答案(但它仍然是被接受的答案)。嘎!真是骗人。非常感谢。