我有许多像地形和建筑物这样的固定对象,我想将它们全部合并到一个VBO中,以减少绘制调用并在存在太多对象时提高性能,我加载纹理并存储它们ids在数组中,我的问题是我可以将纹理绑定到该VBO或必须为每个纹理制作单独的VBO?或者我可以根据偏移量和长度为一个VBO制作多个glDrawArrays
,如果我能做到这一点,这将是顺利和良好的执行?Android OpenGL ES2许多纹理对于一个VBO
0
A
回答
1
在ES 2.0中,如果您想在单次绘制调用中使用多个纹理,唯一不错的选择是使用纹理图集。本质上,您将来自多个逻辑纹理的纹理数据存储在单个OpenGL纹理中,并选择纹理坐标以便为每个基元使用所需的纹理数据。这可以通过调整原始纹理坐标,或通过向着色器中提供一个id并根据id向纹理坐标应用偏移量来完成。
当然,您可以使用多个glDrawArrays()
调用一个VBO,并在它们之间绑定不同的纹理。但是这违背了你减少平局数量的目标。在花费大量时间进行这些类型的优化之前,您一定要确保绘制调用次数真的成为您的瓶颈。
在更高级的OpenGL版本中,您可以使用其他功能来帮助处理此用例,例如数组纹理。
0
有很多标准技术可以让很多游戏引擎执行低级别调用。
配料:该技术将所有指向相同材质的物体组合成一个网格。这些对象甚至不一定是静态的。如果它们是动态的,您仍然可以通过传递模型矩阵数组来批量处理它们。
纹理图集:为所有静态网格物体创建纹理图集是另一个答案中所述的最佳方式。然而,你需要做很多工作来有效地组合纹理并相应地更新UV。
相关问题
- 1. opengl vbo纹理
- 2. 在OpenGL中将纹理映射到VBO
- 3. OpenGL单个VBO vs多个VBO
- 4. 具有多个纹理的VBO
- 5. opengl多纹理
- 6. OpenGL VBO处理
- 7. 在不同的纹理上绘制不同的对象在同一个VBO OpenGL
- 8. 的Box2D/OpenGL的:一个纹理贴图许多顶点
- 9. OpenGL FBO多纹理
- 10. Android OpenGL ES一个矩形的多个纹理
- 11. VBO的纹理浮雕纹理
- 12. OpenGL ES 2.0中具有不同纹理的许多对象
- 13. Android OpenGL ES 2.0多纹理和相机
- 14. Android OpenGL纹理/对象检测
- 15. 2D OpenGL动画纹理(Android)
- 16. OpenGL es 2.0 Android纹理
- 17. Android OpenGL - ES纹理出血
- 18. Android OpenGL ES2.0纹理交换
- 19. Android OpenGL ES 2.0纹理
- 20. 如何将多个纹理应用于多维数据集的VBO?
- 21. OpenGL,GL_MODULATE和多纹理
- 22. OpenGL多位Alpha纹理
- 23. 多活动纹理opengl
- 24. opengl中的vbo管理
- 25. opengl对齐纹理坐标
- 26. OpenGL中多个纹理的问题
- 27. 的OpenGL - 掩模具有多个纹理
- 28. OpenGL:关闭多个纹理单元
- 29. 在OpenGL中使用多个纹理
- 30. OpenGL ES 2.0渲染为多个纹理
第一个选项对我来说并不那么容易,所以我会选择第二个,所以最好创建单独的VBO,每个VBO都有自己的绘制方法或将它们合并,然后在获得偏移量后为每个纹理调用绘制和VBO的部分长度? – Mohamed