【问题标题】:Get pixel normals out of vertex data从顶点数据中获取像素法线
【发布时间】:2013-01-04 00:25:46
【问题描述】:

对于照明,我需要片段着色器中的法线向量。我阅读的教程要求我提供法线数据以及模型的顶点。但是顶点指定的面不是已经给出了法线吗?

为了计算法线,我需要三角形的所有三个顶点。但据我所知,我们只能在顶点着色器的每个通道中访问单个顶点。

如何根据顶点数据计算每个像素的法线向量?我想在那之后应用法线贴图,但那是后来的,与这个问题没有真正的关系。

【问题讨论】:

    标签: opengl glsl shader normals vertices


    【解决方案1】:

    但是顶点指定的面不是已经给出了法线吗?

    是的,也不是。从技术上讲,您可以确定每张脸的法线,但通常在建模器中设计 3D 模型的艺术家希望微调法线以调整照明计算。

    基于顶点数据的每个像素的法线向量?

    只需将法线作为可变变量(varyingout 关键字,取决于 GLSL 版本)传递给片段着色器。法线向量将被重心插值。然后,您可以在片段着色器中将其标准化为单位长度。

    【讨论】:

    • 你答案的第一部分很清楚,我想稍后用法线贴图微调法线。但是,如果只给定一个(当前)顶点但不是所有三个三角形角,我如何计算顶点着色器中的法线?
    • @sharethis:您不会在顶点着色器中计算法线。为每个渲染的帧重做此操作将是低效的。您在加载模型时计算一次法线,通常您甚至不会在渲染器中计算它们。通常,3D 模型与法线一起完全保存。
    • @sharethis:我在stackoverflow.com/a/6661242/524368中详细解释了如何计算网格的顶点法线
    • 只是对正确答案的补充:您无法在顶点着色器中计算顶点法线,但如果您可以在顶点着色器之前使用几何着色器,则在技术上可以计算顶点法线飞。见this thread
    猜你喜欢
    • 1970-01-01
    • 2014-08-31
    • 1970-01-01
    • 2019-01-03
    • 2013-11-06
    • 2013-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多