从顶点数据中获取像素法线
Posted
技术标签:
【中文标题】从顶点数据中获取像素法线【英文标题】:Get pixel normals out of vertex data 【发布时间】:2013-01-04 00:25:46 【问题描述】:对于照明,我需要片段着色器中的法线向量。我阅读的教程要求我提供法线数据以及模型的顶点。但是顶点指定的面不是已经给出了法线吗?
为了计算法线,我需要三角形的所有三个顶点。但据我所知,我们只能在顶点着色器的每个通道中访问单个顶点。
如何根据顶点数据计算每个像素的法线向量?我想在那之后应用法线贴图,但那是后来的,与这个问题没有真正的关系。
【问题讨论】:
【参考方案1】:但是顶点指定的面不是已经给出了法线吗?
是的,也不是。从技术上讲,您可以确定每张脸的法线,但通常在建模器中设计 3D 模型的艺术家希望微调法线以调整照明计算。
基于顶点数据的每个像素的法线向量?
只需将法线作为可变变量(varying
或 out
关键字,取决于 GLSL 版本)传递给片段着色器。法线向量将被重心插值。然后,您可以在片段着色器中将其标准化为单位长度。
【讨论】:
你答案的第一部分很清楚,我想稍后用法线贴图微调法线。但是,如果只给定一个(当前)顶点但不是所有三个三角形角,我如何计算顶点着色器中的法线? @sharethis:您不会在顶点着色器中计算法线。为每个渲染的帧重做此操作将是低效的。您在加载模型时计算一次法线,通常您甚至不会在渲染器中计算它们。通常,3D 模型与法线一起完全保存。 @sharethis:我在***.com/a/6661242/524368中详细解释了如何计算网格的顶点法线 只是对正确答案的补充:您无法在顶点着色器中计算顶点法线,但如果您可以在顶点着色器之前使用几何着色器,则在技术上可以计算顶点法线飞。见this thread。以上是关于从顶点数据中获取像素法线的主要内容,如果未能解决你的问题,请参考以下文章