【发布时间】:2013-12-10 08:47:26
【问题描述】:
假设我只想渲染四边形并且可以重复使用我的网格,我希望能够在一次绘制调用中渲染多个实例。
我想通过将变换矩阵放入缓冲区来使用纹理缓冲区对象来实现这一点。
我了解如何在 C++ 中设置纹理缓冲区对象,但对如何在 GLSL 中获取我的转换感到困惑。
uniform samplerBuffer sampler;
...
... = texelFetch( sampler, index );
在上面的代码中(在顶点着色器中),我不确定samplerBuffer 关键字是如何工作的(并且在查找文档时遇到了很多麻烦)。我想知道给定顶点与纹理缓冲区中的哪个索引相关联,这样可以进行转换查找。我该怎么做? GLSL 语法是什么样的?
可以假设变换矩阵是 4x4 矩阵。我希望能够将 OpenGL 版本要求保持在 2.XX 范围内。
编辑:所以我发现了这个:http://www.opengl.org/registry/specs/ARB/draw_instanced.txt。我可以处理 3.0 的限制。但是,在查找有关如何使用它的示例时,我感到困惑。使用 GLEW,我想我会调用 glDrawElementsInstanced,但互联网上的一些地方说这需要 OpenGL 3.3 或更高版本。如何利用我链接的 3.0 要求?
【问题讨论】:
-
您还可以使用更适合多个矢量和矩阵块上传的统一缓冲区。
标签: c++ opengl glsl batch-processing