1

大家好,

如图所示,我使用 GL_LINE_STRIP 绘制了许多轮廓。但是轮廓看起来一团糟,我想知道如何才能使它看起来不错。(查看深度..等)我必须渲染轮廓,所以我必须坚持使用 GL_LINE_STRIP。我想知道如何为此启用照明?

提前致谢

原始图像

http://oi53.tinypic.com/287je40.jpg

http://oi53.tinypic.com/287je40.jpg

4

3 回答 3

4

照明轮廓不会有多大好处,但您可以使用雾或根据距离(甚至高度)手动设置线条颜色以提供深度效果。

于 2010-11-02T07:57:05.033 回答
3

更新:

umanga,起初我认为光照不起作用,因为光照是基于表面法线向量的——而且你没有表面。但是@roe 指出,法线向量实际上是 OpenGL 中的每个顶点,因此,任何 POLYLINE 都可以有法线。所以这将是一个选择。

正如@Julien 所说,3D 线的法线应该是什么并不完全清楚。问题是如何定义轮廓线的法线,以使生成的照明具有视觉意义并有助于澄清深度?

如果每个轮廓中的所有顶点都是共面的(例如在 XY 平面中),您可以将 3D 法线设置为 2D 法线,将 Z 坐标设为 0。由此产生的照明将给人一种视觉上的形状感,尽管可能没有深度。

如果您知道沿线每个点的曲面斜率(假设存在曲面),则可以使用曲面法线并更好地显示深度;这本质上就像只应用于等高线的山体阴影。那么问题是为什么不显示整个表面呢?

更新结束

+1 Ben 的建议是根据高度(是地形轮廓吗?)或根据与观察者的距离来设置线条颜色。您还可以用相似的颜色填充每个轮廓包围的多边形,如http://en.wikipedia.org/wiki/File:IsraelCVFRtopography.jpg

使线条更清晰的另一种方法是减少它们的数量……您可以调整轮廓的密度吗?例如,每 5 英尺的高度差而不是每 1 英尺的一条等高线,或任何单位。取决于你正在绘制的轮廓。

用于阐明深度的其他技术包括立体视觉,以及在观看者观看时以 3D 形式旋转图像。

于 2010-11-02T10:00:05.773 回答
2

如果您正在寻找阴影,那么您通常会将轮廓转换为实体。通常的方法是通过在边界或超出零高度处设置 4 个角点来构建网格,然后将轮廓放入网格中并让网格对坐标进行三角剖分。一旦完成,你就会得到一个三角实体船体,您可以为其找到法线并在相邻面上对其进行平滑处理以创建平滑的地形。

要对网格进行三角剖分,通常使用 Delaunay 算法,这有点像野兽,但确实存在用于执行此操作的库。我所知道的最好的是基于 Guibas 作为 Stolfi 论文的那些,因为它非常理想。

要生成法线,您需要做一个简单的叉积并确保表面正确,并在输入 glNormal 之前手动重新规范化它们。

在过去,您曾经根据结果制作 glList,但较新的方法是制作顶点数组。如果你想成为额外的闪光,那么你可以寻找重合的平面并优化网格以更快地重绘,但这有点黑艺术 - 对游戏有好处,对 CAD 不太好。

(谢谢上次的奖金)

于 2010-11-02T14:33:44.353 回答