我在理解如何处理/渲染多个OpenGL对象方面有一些困难。我在谷歌和OpenGL红宝书上找到了答案,但是内容并没有完全涉及到我的问题,所以我需要确认自己的理解是否正确。
我的第一个想法是使用X、Y和Z轴的平移和旋转变量来处理位置数据。为该类存储一个单一网格的静态VBO,然后对于我想要呈现的每个实例,需要用一个for-next循环来:
另外一个方法是将每个顶点的所有位置数据粘在一个单独的VBO中,然后使用单个调用来呈现它。在这种方法中,我假设要“创建”一个对象,需要通过一个函数处理每个顶点的位置数据(通过静态数组),并将该特定对象的位置数据添加到顶点中,然后将其存储在VBO中?如果是这样,那如何处理旋转?
第三个想法是在每个对象的实例中存储一个4x4矩阵,该矩阵将保持平移/旋转信息。然后当我准备呈现时,只需加载该对象的矩阵,从单个VBO绘制网格,然后加载下一个对象的矩阵,从同一个VBO绘制,依此类推。
最后,我看到有些人建议为每个单独的对象设置一个VBO,并为每个实例调用drawarray。这种方式对我来说非常低效,让我想知道如果您为每个网格调用VBO的话,那么VBO的存在还有什么意义。似乎立即模式(我知道已被淘汰)会更快,因为您没有创建和绑定每个单独对象的VBO的开销。
这些处理/呈现多个对象的方法是否有效?如果是,每种方法的优缺点是什么?
最有意义的方法是为每个网格设置单个VBO,然后通过更新将其转换,或者每次更新都加载每个对象的矩阵并进行呈现。我对OpenGL和图形渲染相当新,因此我正在尝试充分了解渲染多个对象所需的信息的最佳方式。
我的第一个想法是使用X、Y和Z轴的平移和旋转变量来处理位置数据。为该类存储一个单一网格的静态VBO,然后对于我想要呈现的每个实例,需要用一个for-next循环来:
- 加载身份
- 将其转换到特定对象的位置/旋转
- 使用drawarrays在该位置呈现网格
- 循环到下一个对象,重复以上步骤直到所有对象都被呈现
另外一个方法是将每个顶点的所有位置数据粘在一个单独的VBO中,然后使用单个调用来呈现它。在这种方法中,我假设要“创建”一个对象,需要通过一个函数处理每个顶点的位置数据(通过静态数组),并将该特定对象的位置数据添加到顶点中,然后将其存储在VBO中?如果是这样,那如何处理旋转?
第三个想法是在每个对象的实例中存储一个4x4矩阵,该矩阵将保持平移/旋转信息。然后当我准备呈现时,只需加载该对象的矩阵,从单个VBO绘制网格,然后加载下一个对象的矩阵,从同一个VBO绘制,依此类推。
最后,我看到有些人建议为每个单独的对象设置一个VBO,并为每个实例调用drawarray。这种方式对我来说非常低效,让我想知道如果您为每个网格调用VBO的话,那么VBO的存在还有什么意义。似乎立即模式(我知道已被淘汰)会更快,因为您没有创建和绑定每个单独对象的VBO的开销。
这些处理/呈现多个对象的方法是否有效?如果是,每种方法的优缺点是什么?
最有意义的方法是为每个网格设置单个VBO,然后通过更新将其转换,或者每次更新都加载每个对象的矩阵并进行呈现。我对OpenGL和图形渲染相当新,因此我正在尝试充分了解渲染多个对象所需的信息的最佳方式。