gpt4 book ai didi

opengl - 最简单照明模型中的光方向及其变换

转载 作者:行者123 更新时间:2023-12-02 03:54:25 27 4
gpt4 key购买 nike

所以,我已经在 OpenGL 学习任务中了解了基本的光照。

想象一下这个最简单的照明模型。每个顶点都有一个位置、颜色和法线。着色器获取 ModelViewProjection 矩阵 (MVP)、Modelview 矩阵(MV) 和法线矩阵 (N),计算公式为 ( MV-1)T,以及 LightColorLightDirection 作为制服。顶点着色器执行光照计算 - 片段着色器仅输出插值颜色。

现在,在我遇到的关于这个主题的每个教程中,我都看到两件事让我困惑。首先,LightDirection 已假定位于眼睛坐标中。其次,输出颜色的计算方式为

max(0, dot(LightDirection, N * normal))*LightColor*Color;

我希望LightDirection应该首先反转,也就是说,我认为正确的公式是

max(0, dot(-LightDirection, N * normal))*LightColor*Color;

似乎假设LightDirection实际上是实际光流矢量的反转。

问题 1:此模型中的 LightDirection 被假定为无限远光源的矢量而不是光方向的矢量,这是否是某种既定的约定?这不是一个主要问题,碰巧我在教程中遇到了这样的假设?

问题2:如果LightDirection是世界坐标而不是眼睛坐标,是否应该用法线矩阵或模型 View 矩阵转换为眼睛坐标?

感谢您澄清这些事情!

最佳答案

Q1: Is this some sort of established convention that the LightDirection in this model is assumed to be the vector to the infinitely far light source rather than the vector of the light direction or is this not a principal matter and it just so happened that in the tutorials I came across it was so assumed?

在固定函数 OpenGL 中,当提供光源位置时,第四个参数确定光源是方向性的还是位置性的。在定向光的情况下,提供的矢量指向(无限远的)光源。

如果是位置光源,则每个顶点的 LightDirection 计算如下:LightDirection = LightPosition - VertexPosition——为了简单起见此计算是在眼睛坐标中完成的 .

Q2: If LightDirection is in world coordinates rather than in eye coordinates, should it be transformed with the normal matrix or the modelview matrix to eye coordinates?

在固定函数 OpenGL 中,通过 glLighti 提供的灯光位置由调用时的当前模型 View 矩阵进行转换。如果光线是定位的,它会被通常的模型 View 矩阵转换。如果是定向光,则使用法线矩阵。

关于opengl - 最简单照明模型中的光方向及其变换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7308157/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com