【问题标题】:what kinds of geometry is suitable for rendering tree branches什么样的几何图形适合渲染树枝
【发布时间】:2014-09-30 19:30:09
【问题描述】:

最近我正在做一个渲染树木的项目。
在我的第一个想法中,我选择了圆柱体来代表一个小分支。但结果中有接缝

然后我研究了一个著名的树建模软件“SpeedTree”,它在两个分支之间运行相当顺利:


我看到了它的底层线框,如下所示:

所以我想知道 SpeedTree 使用什么样的几何图形来表示分支?似乎不使用圆柱体,因为两个面不平行。在 Opengl 中实现这样的几何形状很难吗?


更新:
我决定像 SpeedTree 一样使用样条线作为分支的底层骨架,但哪种样条线最适合此目的?

【问题讨论】:

  • @StuartGolodetz 看来这个文档只是给出了一些关于底层实现的cmets,有没有可以给出详细解释的链接?因为我对 3d 图形有点陌生。
  • 很遗憾,我不确定 - 我只是快速谷歌了一下,看看我能为你挖掘什么。

标签: opengl graphics 3d rendering


【解决方案1】:

OpenGL 只渲染三角形组。您可以指定它们的连接方式。 SpeedTree 最有可能在没有任何渲染 API(如 OpenGL)的帮助下计算顶点的位置。

从您发布的线框图来看,SpeedTree 似乎正在沿其长度的不同位置生成树枝的中心和半径。这些数据点中的每一个似乎都变成了一个由 n 个顶点组成的环,然后它用一条三角形连接到前面的控制点。

出于效率原因,SpeedTree 可能会将所有顶点打包到单个 VBO/IBO 对中进行渲染。

【讨论】:

    【解决方案2】:

    它可以使用geometry shader 来生成树的网格。您可以想象将每个分支“绘制”为GL_LINE_STRIP_ADJACENCY,然后让几何着色器生成三角形条带,该三角形条带将成为每个分支段的准圆柱。

    这种方法有助于接缝的原因是您可以根据上一个/下一个分支段的角度/位置/半径调整圆柱体对象的边缘位置。它还允许圆柱体的半径从头到尾变化:随着分支变细,过渡会顺利进行,而不是在接缝处让每个段的半径突然减小。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-08-13
      • 2012-07-27
      • 2017-09-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-26
      • 2015-03-25
      相关资源
      最近更新 更多