c++ - OpenGL:渲染大量立方体

标签 c++ opengl 3d rendering voxel

我正在尝试创建一个包含单位立方体(或球体)的 600x600x600 网格。只有一些立方体存在。所以,基本上,我正在尝试让类似下面的东西由小立方体或球体组成。

A 3D Shadow Hull

问题 1:渲染这样的结构成本很高。它需要 3 个嵌套循环(每个循环 600 次迭代)。有什么办法可以解决吗?

我的想法是将附近的立方体组合成一个(八叉树),因为在我的情况下不会有太多间隙。但我想要一个通用的解决方案。上面这样一个场景(好像是250x250x250的场景)你觉得渲染需要多长时间?

问题 2:实例渲染是否与我的问题有关?

注意:这里我将体素表示为一个立方体,它又需要 6 个四边形。

最佳答案

我过去做过体素渲染引擎。以下是我可以建议的一些快速优化,它们会给您带来良好的速度提升:

  1. 使用几何剔除算法剔除未渲染的位。我使用八叉树,因为它们与体素配合得很好。
  2. 将可见节点从前到后排序,并使用某种算法确定哪些节点根本不可见。另外,充分利用遮挡剔除。
  3. 像其他人建议的那样使用几何着色器。
  4. 制定 LOD 方案。简而言之,如果两个立方体可以合并为一个,并且结果对用户来说是不可察觉的,那就去做吧。良好的 LOD 方案可以大大减少您渲染的数据量。
  5. 请记住,最好的多边形是根本没有绘制的多边形:)。

正确地完成这三件事会给您带来很大的提升,您正在寻找。之后,一切都将根据您的需要和要求进行微调。

关于c++ - OpenGL:渲染大量立方体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22948068/

相关文章:

单个限定名称和两个连续名称之间的 C++11 歧义?

c++ - glfwPollEvents() 不会在按键时调用 keycallback

c++ - 为什么 z 坐标未通过 glm::ortho() 投影归一化?

opengl - 用点填充任意 3D 几何体的方法

javascript - 在 HTML 中旋转瓶子图像

c++ - 我的 makefile 有问题

c++ - C++ H文件问题

c++ - 如何处理声卡缓冲区

opengl - 为什么 glOrtho() 在 Mac 下工作但 gluOrtho2D() 不工作?

c# - 用于 3D 渲染/建模的 FPGA