opengl-es-2.0 – 使用OpenGL ES 2.0渲染多个对象

我试图学习OpenGL ES 2.0做一些iPhone游戏开发。我已经阅读了多个教程和一些OpenGL ES 2.0规范。我所看到的所有例子都创建了一个网格,加载到一个顶点缓冲区,然后渲染它(与预期的翻译,旋转,渐变等)

我的问题是这样:你如何渲染具有不同网格和独立移动的场景中的多个对象?例如,如果我有一辆汽车和摩托车,我可以创建2个顶点缓冲区,并为每个渲染调用保持网格数据,然后只是发送不同的矩阵为每个对象的着色器?或者,我需要以某种方式翻译网格,然后将它们组合成一个单一的网格,使它们可以一次渲染?我正在寻找更多的高级策略/程序结构,而不是代码示例。我想我只是有错误的心理模态如何这样工作。

谢谢!

你为不同的对象维护单独的顶点/索引缓冲区,是的。例如,你可能有一个RenderedObject类,每个实例都有自己的顶点缓冲区。一个RenderedObject可以从一个房子网格中获取它的顶点,一个可能来自一个字符网格等。

在渲染期间,为您正在使用的顶点缓冲区设置适当的变换/旋转/阴影,可能是:

void RenderedObject::render()
{
    ...
    //set textures/shaders/transformations

    glBindBuffer(GL_ARRAY_BUFFER, bufferID);
    glDrawArrays(GL_TRIANGLE_STRIP, 0, vertexCount);
    ...
}

正如在其他答案中提到的,bufferID只是一个GLuint而不是缓冲区的整个内容。如果你需要更多的细节创建顶点缓冲区和填充他们的数据,我很高兴添加这些。

http://stackoverflow.com/questions/7218147/render-multiple-objects-with-opengl-es-2-0

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:opengl-es-2.0 – 使用OpenGL ES 2.0渲染多个对象