【问题标题】:OpenGL lighting question?OpenGL照明问题?
【发布时间】:2010-11-02 07:26:45
【问题描述】:

大家好,

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

提前致谢

原图

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

【问题讨论】:

  • 我不是 100% 确定,但我认为照明应该正常工作(线带转换为非常细的四边形/三角形),只要您在每个点提供法线,添加灯光和把它们打开......不过不知道它是否会让它看起来不错。

标签: opengl graphics 3d lighting


【解决方案1】:

照明轮廓不会起到太大作用,但您可以使用雾或根据距离(甚至高度)手动设置线条颜色以产生深度效果。

【讨论】:

  • +1 表示雾化,但 -1,因为指定每个顶点法线实际上对于线条效果很好。依赖于深度的雾可能是最容易实现的,所以我会试一试(关闭灯光),看看结果是否可以通过;否则,计算轮廓的每个顶点法线,然后尝试。
  • @Matthew,为什么要给本 -1?他并没有说逐顶点法线对线带不起作用(即不能产生照明效果)......他只是说它不会有多大好处。如果您的首要任务是澄清深度,那么这是一个有效的意见。
  • 好吧,这可能比我的意思更苛刻! - 但我确实认为照明线可以通过使用表面法线(在本例中为等值面)提供一些有用的深度信息。我已经很久没有使用这种技术了,所以我可能记错了它的实用性。
【解决方案2】:

更新:

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

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

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

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

更新结束

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

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

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

【讨论】:

  • 虽然这并不完全正确,闪电工作使用法线向量,每个顶点给定并插值(或者照明是每个顶点计算并插值,没关系),表面法线无关有了它,法向量既可以沿线插值,也可以沿曲面插值。
  • @roe: R3 中的线可以正常吗? R3 中的法线向量通常定义为两个其他(非共线)向量的叉积——一个曲面有两个非共线向量,一条线没有。
  • @Julien;是的,可以这样定义曲面的法线。 OpenGL 选择不这样做(这是正确的),而是将法线定义为每个顶点的显式法线向量。甚至一个点在 OpenGL 中也可以有法线,因此可以被着色。数学线也没有粗细,因此在屏幕上看不到,但它是(它被渲染为三角形)。
  • @roe,很好,点或线可以就OpenGL而言具有法线向量...在此基础上编辑我的答案。
  • @umanga,我更新了这个答案以反映@roe 的观点,即线条确实可以有法线。
【解决方案3】:

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

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

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

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

(感谢上次的奖金)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-06
    • 1970-01-01
    • 2022-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多