Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java GLSL点光变换_Java_Opengl_Glsl_Lwjgl - Fatal编程技术网

Java GLSL点光变换

Java GLSL点光变换,java,opengl,glsl,lwjgl,Java,Opengl,Glsl,Lwjgl,我在GLSL中编写了一个基本的顶点着色器。以下是源代码: varying float intensity; uniform vec4 lightPos; void main() { intensity = 0.1; vec3 tfVert = (gl_ModelViewMatrix*gl_Vertex).xyz; vec3 tfNorm = normalize(gl_NormalMatrix*gl_Normal).xyz; vec3 tfLightPos = (

我在GLSL中编写了一个基本的顶点着色器。以下是源代码:

varying float intensity;
uniform vec4 lightPos;

void main() {
    intensity = 0.1;
    vec3 tfVert = (gl_ModelViewMatrix*gl_Vertex).xyz;
    vec3 tfNorm = normalize(gl_NormalMatrix*gl_Normal).xyz;
    vec3 tfLightPos = (gl_ModelViewMatrix*lightPos).xyz;

    vec3 lightDir = normalize(tfLightPos-tfVert).xyz;
    intensity += dot(lightDir, tfNorm);

    gl_Position = gl_ModelViewProjectionMatrix*gl_Vertex;
}

之后,片段着色器将使用不同强度浮动的亮度照亮片段。问题是:我画了几个立方体,然后将一个OBJ模型加载到世界上,或者类似的东西。然后我使用glRotatef()和glTranslatef()再次绘制相同的内容灯光在两个不同的位置显示两次。(某种程度上)。一次在平移位置,一次在原始位置。平移模型仅受平移位置的灯光影响,而原始模型仅受原始位置的灯光影响。另外,我不使用gl_LightSource0[]来修复此问题也是至关重要的。我做错什么了吗?有办法解决这个问题吗?我使用glTranslatef()和glRotatef()进行相机定位和旋转,如果这很重要的话。

不要通过gl\u ModelViewMatrix变换lightPos


只需使用lightPos.xyz代替tfLightPos——事实上,您根本不需要tfLightPos

遗憾的是,如果不向顶点着色器传递更多信息,这是不可能修复的。由于GLTRANSTEF和glRotatef用于相机运动和模型运动,因此着色器无法在不将变换和旋转传递给vec3s中的GLSL的情况下区分这两种运动。

您的
#version
指令在哪里?@genpfault
#version 120
预期的行为是什么?一盏灯照亮一切?@genpfault是的,这是理想的效果…只是将灯光的位置设置为相机的位置。换句话说,你的lightPos值是{0,0,0}?是的,对不起,我应该说:P我正在寻找一种方法,使灯光在世界空间中的位置保持在{0,0,0}或任何其他位置,因此,在将模型和摄影机xforms组合在一起之前,需要获得灯光位置。因此,您将传递相对于相机的位置。@Abaab可能与当前问题完全脱离主题,但您的评论让我明白了为什么我使用前照灯(绑定到相机位置、旋转等)而不是简单的灯光。