最近,我正在做一个渲染树木的项目
在我第一次想到的时候,我选择了圆柱来代表一个小分支。但结果中我有接缝:
然后我查看一个着名的树木建模软件" SpeedTree "它在两个分支之间相当顺利:
我看到了它的底层线框,如下所示:
所以我想知道 SpeedTree用于分支表示的几何类型?似乎不使用气缸,因为两个面不平行。在Opengl中很难实现这样的几何体吗?
更新
我决定使用样条曲线作为分支的底层骨架,就像SpeedTree一样,但是哪种样条曲线最适合这个目的?
答案 0 :(得分:0)
使用geometry shader生成树的网格可能会有效。您可以想象将每个分支“绘制”为GL_LINE_STRIP_ADJACENCY
,然后让几何着色器生成三角形条带,该条带将成为每个分支段的准圆柱体。
这种方法有助于接缝的原因是您可以根据上一个/下一个分支段的角度/位置/半径来调整圆柱体对象的边缘。它还允许圆柱体的半径从端到端变化:随着分支变薄,过渡将平滑地发生,而不是使每个分段在接缝处突然向下降半径。
答案 1 :(得分:0)
OpenGL只渲染三角形组。您可以指定它们的连接方式。最有可能的是,SpeedTree无需任何渲染API(如OpenGL)的帮助即可计算顶点的位置。
从您发布的线框中,看起来SpeedTree在沿其长度的不同位置生成树枝的中心和半径。这些数据点中的每一个似乎都成为n个顶点的环,然后它连接到一个带有三角形条带的控制点之前。
出于效率原因,SpeedTree可能将所有顶点打包成一个VBO / IBO对进行渲染。