2009-05-29 69 views
3

有人知道如何绘制3D曲面并隐藏无形线条吗?如何绘制3D曲面并隐藏无形线条?

我记得从Apple II电子书阅读一些代码,这是只有约25基本路线,并且它可以绘制一些3D表面,如山或看起来像水波纹的形状。首先显示无形线条,但添加了几行代码后,无形线条也消失了。

是否有人知道如何做到这一点还是知道资源网这样做呢?

+0

实际上,它可以是点或线...我认为在某些情况下,该点被连接到形成线 – 2009-05-29 04:35:35

回答

5

这取决于你如何绘制多边形。我建议您阅读一些关于OpenGL或DirectX的内容,因为它们旨在为您解决许多这些问题。如果你不想直接使用它们,那么已经在这些API之上建立了许多伟大的引擎。

假设你正在绘制填充多边形(纹理,固体等),这里有几个常见的算法可以使用:

  • 排序从相机的多边形的距离和第一画那些furtherest远,否则被称为Painters Algorithm。许多旧的3D游戏都使用这种方法,如经典Doom,它也使用BSP Tree进行高效分类。

  • 存储距离摄像机最近的距离到屏幕上的每个pizel,并且不要画任何更远的地方,否则称为Z-Buffering。这种方法得到了现代3D视频卡,OpenGL和DirectX的大力支持。

  • 使用ray tracing算法自然已隐面消除。

+0

是的。有意义使用我们的硬件。提问者正在谈论的代码是绘制线条,但没有填充多边形。 – Nosredna 2009-05-29 03:58:11

3

我记得那本书。如果我没有记错的话,这些都是曲面图,使用的技巧是从前到后绘制线条,跟踪每个x绘制的最小和最大y值。可能是抽屉是布雷森汉姆,修改后跳过所画的点数,除非它们大于最大值或小于最小值。

有关的算法是你可以做的曲线,也有什么好的。不只是线段。可能涟漪图片是以x和y为参数的trig函数的某种组合。

我仍然可以看到在我的头上的情节。很想知道这本书是从哪里来的。

2

如果您绘制三角形网格,那么你应该做的每一个三角形的背面剔除,并没有得出有三角形的边正常的背对面。您将法线计算为三角形中两个连续边的叉积。

如果你想只绘制的轮廓,只绘制边,一个三角形之间去前置正常的,一个三角形的背对着正常。

或者你使用OpenGL,打开深度缓存,而忘记了所有底层的数学:-)