为了好玩,我尝试为DCPU-16制作线框查看器。我了解如何做所有事情,除了如何隐藏线框中隐藏的线。因此,这里所有的问题都假设您可以使用OpenGL,但是不幸的是,我无法使用DCPU-16之类的东西(或任何类型的硬件加速)。
我在Google图书上找到了关于Appel算法的相当不错的描述。但是,有一个问题我很难弄清楚。
Appel将轮廓线定义为由正面和背面多边形共享的边,或不是封闭多面体一部分的正面多边形的未共享边。由两个正面多边形共享的边不会改变可见性,因此不是轮廓线。在图8.4中,边缘AB,EF,PC,GK和CH是轮廓线,而边缘ED,DC和GI不是轮廓线。
我了解算法的规则及其轮廓线后的工作方式,但是我不知道我该怎么做才能确定一条边是否被正面和背面多边形共享,或者从编码的角度来看,它不是封闭多面体的一部分的正面多边形的未共享边。我可以看一下形状,也可以知道脑海中的轮廓线是什么,但是我不知道如何将“理解”转换为编码算法。
更新资料
我在确定轮廓线方面取得了一些进展。我从布法罗大学计算机图形学课上找到了这 两个讲义。
考虑边缘。这些分为三类。
- 连接两个不可见面的边本身就是不可见的。这将从列表中删除并忽略。
- 连接两个潜在可见面的边缘称为“材料边缘”,需要进一步处理。
- 连接潜在可见面和不可见面的边缘是“材料边缘”的特殊情况,也称为“轮廓边缘”。
使用以上两条信息,我可以更接近将其编写为代码,但是还有很长的路要走。