gpt4 book ai didi

opengl - 在现代 GLSL 中如何将定向光转换为屏幕坐标?

转载 作者:行者123 更新时间:2023-12-02 06:43:57 25 4
gpt4 key购买 nike

我正在将我的着色器从依赖 OpenGL 固定功能管道中切换出来。以前,OpenGL 自动为我转换灯光,但现在我需要自己完成。

我的顶点着色器中有以下 GLSL 代码:

//compute all of the light vectors. we want normalized vectors 
//from the vertex towards the light
for(int i=0;i < NUM_LIGHTS; i++)
{
//if w is 0, it's a directional light, it is a vector
//pointing from the world towards the light source
if(u_lightPos[i].w == 0)
{
vec3 transformedLight = normalize(vec3(??? * u_lightPos[i]));
v_lightDir[i] = transformedLight;
}
else
{
//this is a positional light, transform it by the view*projection matrix
vec4 transformedLight = u_vp_matrix * u_lightPos[i];

//subtract the vertex from the light to get a vector from the vertex to the light
v_lightDir[i] = normalize(vec3(transformedLight - gl_Position));
}
}

我该用什么来替换???在行 vec3transformedLight = normalize(vec3(??? * u_lightPos[i]));?

我已经有以下矩阵作为输入:

uniform mat4 u_mvp_matrix;//model matrix*view matrix*projection matrix
uniform mat4 u_vp_matrix;//view matrix*projection matrix
uniform mat3 u_normal_matrix;//normal matrix for this model

我认为这些都不是。它显然不是 mvp 矩阵或法线矩阵,因为它们特定于当前模型,并且我正在尝试转换为 View 坐标。我也不认为这是 vp 矩阵,因为它包含翻译,而我不想翻译向量。

我可以根据当前提供给着色器的矩阵来计算我需要的矩阵吗?如果可以,我需要计算什么?如果不是,我需要添加什么矩阵以及如何计算?

最佳答案

您可以使用相同的 view_projection 矩阵。是的,该矩阵确实包含平移,但由于光矢量的 w = 0,矩阵乘法将不会应用它。

关于opengl - 在现代 GLSL 中如何将定向光转换为屏幕坐标?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8544393/

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