合并球体和圆柱体

时间:2013-03-17 18:49:19

标签: opengl geometry vertex-buffer cylindrical

我想用球体和圆柱渲染弹簧。每个气缸的两端各有两个球体,所有气缸沿弹簧中心线放置。我可以做到这一点..渲染是好的。我现在正在使用gluSphere和gluCylinder。

现在,当我看到表演时,它的表现并不好,非常慢。所以我想知道以下是否可能:

我是否可以组合球体和圆柱体的表面并仅渲染外壳而不是球体的内部覆盖部分......?

我也读过VBO ..是否可以将gluSphere和gluCylinder与VBO一起使用..? 我无法使用显示列表,因为弹簧的属性不断变化......!

任何人都可以提出更好的建议吗?

2 个答案:

答案 0 :(得分:3)

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

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

  2. 纯粹在OpenGL中绘制对象。使用后固定功能OpenGL管道绘制此类对象的惯用方法是绘制体积3D线。您绘制的线越多,您的弹簧曲率就会越多,这会牺牲渲染时间。

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

    This博文可以很好地描述该技术。

答案 1 :(得分:1)

你最好的选择可能是在任何3D建模软件(Blender想到)中进行快速教程,然后使用CSG操作对其弹簧进行建模。

这种方法不仅可以解决冗余基元问题,而且还可以很容易地将模型用于VBO。您所要做的就是解析Blender的输出文件(最简单的是.obj),检索填充了顶点数据的数组(位置,法线,可能是纹理坐标)。

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