gpt4 book ai didi

java - 如何选择光源来实现 Phong 着色?

转载 作者:行者123 更新时间:2023-12-02 10:25:47 26 4
gpt4 key购买 nike

我正在尝试实现 Phong 着色模型,但我不确定如何选择光源。更具体地说,我不明白光源应该是什么样子。它应该是vec3吗?或者也许是我在 Java 代码中定义的矩阵?另外,如果我们假设我希望相机作为光源,那么与不同的光源(例如 View 世界中其他地方的点)应该有什么不同?我真的很感激一个解释或者指导我应该如何解决这样的问题而不仅仅是代码。

这是到目前为止我的顶点着色器中的内容:

 #version 330
layout(location=0) in vec3 vertex;
layout(location=1) in vec3 normals;

uniform mat4 viewMatrix;
uniform mat4 projMatrix;

out vec3 vertexColor;
out vec3 pixelCoordinates;
out vec3 normalizedNormals;

void main(){

if (gl_VertexID < 6) {
vertexColor = vec3(1.0, 0.0, 0.0);
} else if (gl_VertexID < 12) {
vertexColor = vec3(0.0, 1.0, 0.0);
} else if (gl_VertexID < 18) {
vertexColor = vec3(0.0, 0.0, 1.0);
} else if (gl_VertexID < 24) {
vertexColor = vec3(1.0, 1.0, 0.0);
} else if (gl_VertexID < 30) {
vertexColor = vec3(1.0, 0.0, 1.0);
} else {
vertexColor = vec3(0.0, 1.0, 1.0);
}



pixelCoordinates = vec3(viewMatrix*vec4(vertex,1.0));
normalizedNormals = normalize(mat3(viewMatrix)*normals);
gl_Position = projMatrix*viewMatrix*vec4(vertex, 1.0);

}

这就是我的片段着色器当前的样子:

 #version 330

in vec3 vertexColor;
in vec3 pixelCoordinates;
in vec3 normalizedNormals;
out vec3 pixelColor;

void main(){



float il = 1;
float ia = 0.2;
float id ;

vec3 v = normalize(-pixelCoordinates);

}

当我编译时,我得到一个黑屏,这当然会发生,因为我仍然缺少环境光和最终的光,为此我需要设置一个光源。

最佳答案

您可以定义的最简单的光源是定向光。对于定向光,您只需要一个包含光方向的 vec3。直接使用该光线方向来计算 Phong 照明模型。

注意您正在使用的特定方向 vector => 任一

  1. 使用朝向光源的方向和朝向观察者的方向执行计算,或
  2. 使用入射光方向和观察者朝向表面的方向进行计算

我提到这一点是因为如果你弄乱了方向,两个 vector 之间的点积(余弦)将为负。

执行照明计算时,确保所有数据都位于同一空间中非常重要。即,确保您的光线方向与您的观察者/相机位置的顶点位置位于同一空间。

两个最明显的空间选择是:世界空间和 View 空间。如果您选择世界空间,您可以将观察者/相机的位置作为制服传递,并且光线方向将保持不变;如果您要查看 View 空间,则查看器/相机将始终位于 (0,0,0),但是您必须将每个帧中的光线方向转换为 View 空间 - 在您的情况下使用矩阵 mat3(viewMatrix)如果您的场景没有使用非均匀缩放,应该可以解决问题。

成功计算定向光的照明后,您可以继续研究其他光源,例如点光源,这些光源主要由位置 vector 定义(您再次计算每个顶点的方向 vector )。互联网上有很多关于此主题的优秀教程。

关于java - 如何选择光源来实现 Phong 着色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53971799/

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