我一直在学习OpenGL,并且能够使用三角形条创建一个成功的2D绘图系统。我写了一个粒子生成器来测试批处理几何,一切运行良好,我能够在iPhone 5上以60 fps渲染30k +顶点。我使用退化三角形连接粒子并立即绘制它们。我想要实现的是批量渲染而不使用退化三角形,因为这会将发送到GPU的数据量减少1/3,这将是巨大的数量。
我试图将glDrawElements与三角形一起使用以下代码绘制2个精灵
//the vertices for the square (2d)
GLfloat square[] = {
50, 50, //bottom left
100, 50, //bottom right
50, 100, //top left
100, 100, //top right
150, 200, //bottom left
200, 150, //bottom right
150, 200, //top left
200, 200 //top right
};
//texture coords
GLfloat tex[] = {
0,0,
1,0,
0,1,
1,1,
0,0,
1,0,
0,1,
1,1
};
GLubyte indices[] =
{
0,2,3,
0,3,1,
0,2,3,
0,3,1
};
//actual drawing code
glBindBuffer(GL_ARRAY_BUFFER, 0);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
glVertexAttribPointer(ATTRIB_VERTEX, 2, GL_FLOAT, GL_FALSE, 0, square);
glVertexAttribPointer(ATTRIB_TEX, 2, GL_FLOAT, GL_FALSE, 0, tex);
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, image);
glDrawElements(GL_TRIANGLES, 12, GL_UNSIGNED_BYTE, indices);
此代码无问题地绘制第一张图像,但第二张图像失真。我一直在网上看,但一直无法弄清楚如何正常工作。
答案 0 :(得分:0)
首先,您目前正在为两个四边形使用相同的索引,因此第二个图像甚至根本不可见。
除了第二个四边形的顶点数据混乱之外,你有两次(150, 200)
点,第一个应该是(150, 150)
。