Mas*_*rem 4 c++ opengl vertex-shader
所以我想将所有网格存储在一个大的 VBO 中。问题是,如何只进行一次绘制调用,但让每个网格体都有自己的世界矩阵模型?
我的想法是在绘图之前将一系列矩阵提交给制服。在 VBO 中,我会将网格的每个第一个顶点的颜色设为负值(因此我将使用签名位来检查顶点是否是网格的第一个顶点)。
好的,所以我可以检测到新的网格何时开始,并且我准备好了一个矩阵数组,可能还准备了一个名为“索引”的制服。但是,每次遇到新网格时,如何将该索引加一呢?
您可以在着色器中修改制服吗?如果是这样,怎么办?
您可以在着色器中修改制服吗?
如果可以的话,它就不再统一了,不是吗?
此外,即使使用图像加载/存储或 SSBO 也无法完成您想要做的事情,这两者都允许着色器写入数据。它不会工作,因为顶点着色器调用不需要按顺序执行。许多是同时发生的,并且任何着色器调用都无法知道它将发生在网格中的“第一个顶点”“之后”。
处理这个问题最简单的方法就是显而易见的解决方案。单独渲染每个网格,但在每次绘制调用之前为每个网格设置制服。当然,无需在绘制之间更改缓冲区。统一更改虽然并不便宜,但并不是现有的最昂贵的状态更改。
有更复杂的绘图方法可以提高性能。但这种形式足以满足大多数需要。您已经完成了最困难的部分:除了统一状态之外,您不再需要任何状态更改(纹理、缓冲区、顶点格式等)。
| 归档时间: |
|
| 查看次数: |
4817 次 |
| 最近记录: |