• Advertisement
Sign in to follow this  

Light position/rotation

This topic is 404 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

So I'm a complete noob when it comes to OpenGL and GLSL but I have experience with DirectX. I'm developing a simple 3D application with a rotating sphere. The problem I'm facing is the rotation effects the position of the light, I'd like the light position to remain fixed while the sphere rotates. I know this is a shader issue because the view matrix and light position are stored in uniform values.

I tried creating a new uniform and multiplying by that instead of viewMatrix, I also tried resetting the view matrix to identity state before/after drawing the sphere but neither solution worked. I'm using Juce framework to develop the application but I don't think that makes a difference. Can someone point me in the right direction? Tom

if (p_Uniforms->projectionMatrix != nullptr) p_Uniforms->projectionMatrix->setMatrix4(CreateProjectionMatrix().mat, 1, false);
if (p_Uniforms->texture != nullptr) p_Uniforms->texture->set((GLint)0);
if (p_Uniforms->lightPosition != nullptr) p_Uniforms->lightPosition->set(-15.0f, 10.0f, 15.0f, 0.0f);
if (p_Uniforms->viewMatrix != nullptr) p_Uniforms->viewMatrix->setMatrix4(CreateViewMatrix().mat, 1, false);
attribute vec4 position;
attribute vec4 normal;
attribute vec4 sourceColour;
attribute vec2 texureCoordIn;

uniform mat4 projectionMatrix;
uniform mat4 viewMatrix;
uniform vec4 lightPosition;

varying vec4 destinationColour;
varying vec2 textureCoordOut;
varying float lightIntensity;

void main()
{
	destinationColour = sourceColour;
	textureCoordOut = texureCoordIn;
	
	vec4 light = viewMatrix * lightPosition;
	lightIntensity = dot(light, normal);
	
	gl_Position = projectionMatrix * viewMatrix * position;
}
varying vec4 destinationColour;
varying vec2 textureCoordOut;
varying float lightIntensity;

uniform sampler2D demoTexture;

void main()
{
	float l = max(0.3, lightIntensity * 0.3);
	vec4 colour = vec4(l, l, l, 1.0);
	
	gl_FragColor = colour * texture2D(demoTexture, textureCoordOut);
}

ss1.jpg

ss2.jpg

Share this post


Link to post
Share on other sites
Advertisement
Sign in to follow this  

  • Advertisement