gpt4 book ai didi

c++ - 如何在现代 opengl 中处理正交投影中的照明?

转载 作者:行者123 更新时间:2023-11-28 01:20:56 25 4
gpt4 key购买 nike

<分区>

我一直在透视投影的眼睛空间坐标中的片段着色器中进行照明计算(顶点着色器和片段着色器都已附加)并且它一直运行良好。

但是当相同的着色器用于正交投影或(FOV)视野在透视投影(10 度 FOV)中减少时,它就不能很好地工作。阴影变得怪异。

Weird shading image

到目前为止,我的理解是,由于正交投影的工作方式,眼睛坐标导数的计算在 fragemt 着色器中变得毫无意义,并且眼睛坐标位置的导数始终为零,除了边缘(如果我在这里错了,请纠正我,因为我使用计算机图形和 OpenGL 的经验有限)。我也无法弄清楚如何正确地做到这一点。如果有人能指出我正确的信息来源,那就太好了。

顶点着色器

#version 330 core
layout (location = 0) in vec3 vertex_position;

uniform mat4 transform_matrix;
uniform mat4 view_matrix;
uniform mat4 model_matrix;
out vec3 ec_pos;
void main()
{
gl_Position = (view_matrix*transform_matrix*model_matrix*vec4(vertex_position, 1.0));
ec_pos = gl_Position.xyz;
}

片段着色器

#version 330 core
out vec4 FragColor;
uniform vec3 objectColor;
in vec3 ec_pos;
void main()
{
vec3 lightColor = vec3(0.99,0.96,0.89);
vec3 lightPos = vec3(0,0,0,1);
vec3 ec_normal = normalize(cross(dFdx(ec_pos), dFdy(ec_pos)));
float diff = max(dot(ec_normal, lightPos), 0.0);
vec3 diffuse = diff * lightColor;
vec3 result = diffuse * objectColor;
FragColor = vec4(result, 1.0);
}

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