相关疑难解决方法(0)

在OpenGL中快速绘制许多相同的对象

所以我正在开发一款游戏,我需要绘制很多相同的对象.相同的形状,相同的尺寸,相同的颜色,只是不同的位置.

现在我的设置是这样的.

我有一些类Renderer,想要在屏幕上绘制的对象可以调用static void addVertex(float x, float y, float z);哪个将顶点存储到一个std::vector.当每个人都完成绘图时static void draw();,Renderer调用所有东西都塞进VBO并绘制到屏幕上.

绘制看起来像这样:

void Renderer::draw() {
    glBindBufferARB(GL_ARRAY_BUFFER_ARB, _quadID);
    glBufferSubDataARB(GL_QUADS, 0, _vertexBuffer.dataSize(), _vertexBuffer.toArray());

    glColorPointer(4, GL_FLOAT, 0, _colorBuffer.toArray());

    glEnableClientState(GL_VERTEX_ARRAY);
    glEnableClientState(GL_COLOR_ARRAY);
    glVertexPointer(3, GL_FLOAT, 0, _vertexBuffer.toArray());

    glDrawArrays(GL_QUADS, 0, (_vertexBuffer.size() / 3));
    glDisableClientState(GL_VERTEX_ARRAY);
    glDisableClientState(GL_COLOR_ARRAY);

    glBindBufferARB(GL_ARRAY_BUFFER_ARB, 0);

    _vertexBuffer.clear();
    _colorBuffer.clear();
}
Run Code Online (Sandbox Code Playgroud)

为了我的目的或多或少地管理的课程的地点_vertexBuffer和地点._colorBuffertemplate <class T> Bufferstd::vector<T>

通过这种设置,我可以在开始放慢速度之前在屏幕上获得大约300个内容.现在一切都是GL_QUAD.请记住,我对OpenGL有点新鲜,如果以上是令人尴尬的,我很抱歉.

我怎样才能改善这一点来解释相似的多边形?

c++ opengl

13
推荐指数
1
解决办法
9710
查看次数

在OpenGL ES中绘制的有效方法

在我的应用程序中,我通过OpenGL ES Api绘制了很多立方体.所有立方体都具有相同的尺寸,只有它们位于空间的不同坐标.我可以想到两种绘制它们的方法,但我不确定哪种方法最有效.我不是OpenGL专家,所以我决定在这里问一下.

方法1,这就是我现在使用的:由于所有立方体的尺寸相同,我只计算一次顶点缓冲区,索引缓冲区,普通缓冲区和颜色缓冲区.在刷新场景期间,我遍历所有立方体,对同一组缓冲区执行bufferData(),然后使用drawElements()调用绘制多维数据集的三角形网格.由于每个立方体位于不同的位置,我在绘制之前翻译mvMatrix.对每个多维数据集执行bufferData()和drawElements().在这种方法中,我可能通过不每次计算缓冲区来节省大量内存.但我正在进行很多drawElements()调用.

方法2将:将所有立方体视为遍布场景的多边形集.计算每个多边形的顶点,索引,颜色,正常缓冲区(实际上是多边形内的三角形),并在单次调用bufferData()时将它们推送到图形卡内存.然后单击调用drawElements()绘制它们.这种方法的优点是,我只做一个bindBuffer和drawElements调用.缺点是,我使用大量内存来创建缓冲区.

我对OpenGL的经验是有限的,从性能的角度来看,不知道上述哪种方法更好.

我在WebGL应用程序中使用它,但它是一个通用的OpenGL ES问题.

opengl-es webgl

11
推荐指数
2
解决办法
6647
查看次数

标签 统计

c++ ×1

opengl ×1

opengl-es ×1

webgl ×1