1

我想使用球体和圆柱体渲染弹簧。每个圆柱体的每一端都有两个球体,所有圆柱体都沿着弹簧中心线放置。我可以做到这一点..并且渲染很好。我目前正在使用 gluSphere 和 gluCylinder 进行操作。

现在,当我查看性能时,它并不好,它非常慢。所以我想知道以下是否可行:

是否有可能我结合球体和圆柱体的表面并只渲染外壳而不渲染球体的内部覆盖部分......?

我还阅读了有关 VBO 的文章 .. 是否可以将 gluSphere 和 gluCylinder 与 VBO 一起使用 .. ?我不能使用显示列表,因为弹簧的属性不断变化......!

有人可以提出更好的建议吗?

4

2 回答 2

3

您可能需要重新考虑绘制弹簧的方式。在我看来,有两种有效的方法。

  1. 使用Assimp或其他易于与 OpenGL 集成的模型加载软件加载弹簧模型。可以在Turbo Squid或通过 Google 的 3D 仓库(在 Google Sketch-Up 中)找到免费的 3D 模型。

  2. 纯粹在 OpenGL 中绘制对象。使用后固定函数 OpenGL 管道绘制此类对象的惯用方法是绘制体积 3D 线。您绘制的线越多,您可以为弹簧提供更多的曲率,但会以渲染时间为代价。

    对于绘制弹簧,我建议您定义一组定义弹簧形状的点(具有邻接关系),并使用原始类型 GL_LINE_STRIP_ADJACENCY 绘制这些点。然后,在着色器程序中使用几何着色器将这个像素绑定的线带扩展为一组由三角形带组成的体积 3D 线。

    这篇博客文章很好地描述了这项技术。

于 2013-03-17T19:23:02.457 回答
1

您最好的选择可能是在任何 3D 建模软件中学习一个快速教程(想到Blender ),然后使用CSG操作对处于静止姿势的弹簧进行建模。

这种方法不仅使您摆脱了多余的基元,而且使您的模型与 VBO 一起使用变得非常容易。您所要做的就是解析 Blender 的输出文件(最简单的是.obj),检索填充了顶点数据(位置、法线,可能是纹理坐标)的数组。

最后,要“动画”你的弹簧,你可以使用顶点着色器。你只需要传递另一个描述弹簧变形程度的制服,然后在那里进行其余的变换。

于 2013-03-17T19:25:16.183 回答