gpt4 book ai didi

java - LWJGL GLSL 着色器定向光呈现由内而外的效果

转载 作者:太空宇宙 更新时间:2023-11-04 14:13:34 24 4
gpt4 key购买 nike

当我使用定向光着色器渲染 vbo 立方体时,灯光显示为“由内而外”。 (抱歉,如果我无法更好地解释它)。

Outside

Inside

这是我的顶点着色器代码(我的片段着色器仅应用颜色,所有工作都在顶点着色器中完成)。

#version 150 core
in vec4 in_Position;
in vec4 in_Color;
in vec2 in_TextureCoord;
in vec3 in_Normal;

uniform sampler2D texture;

uniform mat4 projection;
uniform mat4 view;
uniform mat4 model;
uniform mat3 normalMatrix;
uniform vec3 lDir;

out vec4 color;

void main(void) {
mat3 nMat = normalMatrix;
vec3 normal = normalize(in_Normal * nMat);
vec3 dir = normalize(lDir);
float nl = max(dot(dir, normal), 0.25);
//color = NdotL * vec4(0,1,0,1);
color = vec4(0,1,0,1) * nl;
gl_Position = projection * view * model * in_Position;
}

lDir 统一变量存储 {0,1,1} 的 float[] 数组。统一变量normalMatrix是这样计算的。

    FloatBuffer preBuffer = BufferUtils.createFloatBuffer(16);
modelMatrix.store(preBuffer);
preBuffer.flip();
Matrix4f preMat = new Matrix4f();
preMat.load(preBuffer);

Matrix3f preModel3f;
Matrix3f normal3f = new Matrix3f();
preModel3f = Tk.to3f(preMat);
preModel3f.transpose(normal3f);
normal3f.invert();

normal3f.store(nmBuffer);
nmBuffer.flip();
glUniformMatrix3(glGetUniformLocation(ss.pId, "normalMatrix"), false, nmBuffer);

modelMatrix 变量是不言自明的,只是它是一个缓冲区,而不是一个矩阵。 Normal3f 变量存储模型矩阵的转置逆矩阵(我非常确定这是计算法线矩阵的正确方法)。我必须将 modelMatrix 缓冲区放入名为 preBuffer 的缓冲区中,如果不这样做,我会因某种原因收到错误。

如果您需要其他任何内容来帮助解决此问题,请发表评论。

最佳答案

我发现了问题,当我将文本渲染到屏幕上(描述立方体问题的文本)时,我忘记将 glBlendFunc() 设置回此设置,

glBlendFunc(GL_ONE, GL_ZERO);

这导致了透明度问题,并解决了一些其他问题。

关于java - LWJGL GLSL 着色器定向光呈现由内而外的效果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28005911/

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