繁体   English   中英

批处理OpenGL精灵

[英]Batching OpenGL sprites

我一直在学习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);

此代码绘制第一个图像没有问题,但第二个图像变形。 我一直在网上寻找,但一直无法弄清楚如何使其正常工作。

首先,您当前对两个四边形使用相同的索引,因此第二张图像甚至根本不可见。

除了第二个四边形的顶点数据混乱以外,您还获得了两次(150, 200)点,第一个可能应该是(150, 150)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM