Jump to content

View more

Image of the Day

Boxes as reward for our ranking mode. ヾ(☆▽☆)
#indiedev #gamedev #gameart #screenshotsaturday https://t.co/ALF1InmM7K
IOTD | Top Screenshots

The latest, straight to your Inbox.

Subscribe to GameDev.net Direct to receive the latest updates and exclusive content.


Sign up now

incorrect lighting (normals)

4: Adsense

Old topic!

Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.


  • You cannot reply to this topic
No replies to this topic

#1 proanim   Members   

454
Like
0Likes
Like

Posted 20 January 2013 - 08:00 PM

Until now everything was going ok with my program, until I tried to implement simple directional lighting. I am not exactly sure where is the problem. I checked everything. I get this

 

 

clipboard01toq.jpg
 
The thing on the right supposed to be torus (???)
 
Now my rendering function look like this
 
void RenderScene()
{
	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

	glEnable(GL_TEXTURE_2D);
	spDirLight.useProgram();
	glBindVertexArray(uiVAO[0]);

	// set light properties
	float fSine = sin(SunAngle*3.1415/180.0);
	glm::vec3 vSunPos(cos(SunAngle*3.1415/180.0)*70, sin(SunAngle*3.1415/180.0)*70, 0.0);

	// change color of sky depending on sun's position
	glClearColor(0.0f, std::max(0.0f, 0.9f*fSine), std::max(0.0f, 0.9f*fSine), 1.0f);

	spDirLight.setUniform("sunLight.vColor", glm::vec3(1.0f, 1.0f, 1.0f));
	spDirLight.setUniform("sunLight.fAmbientIntensity", 0.25f);
	spDirLight.setUniform("sunLight.vDirection", -glm::normalize(vSunPos));
	spDirLight.setUniform("projectionMatrix", &mProjection);

	mProjection = glm::perspective(45.0f, 4.0f / 3.0f, 0.1f, 1000.0f);
	mModelView = CameraLook(vEye, vView, vUp);

	spDirLight.setUniform("gSampler", 0);
	spDirLight.setUniform("modelViewMatrix", &mModelView);
	spDirLight.setUniform("vColor", glm::vec4(1.0f, 1.0f, 1.0f, 1.0f));

	// render ground
	tTextures[0].bindTexture();
	glDrawArrays(GL_TRIANGLES, 36, 6);

	tTextures[1].bindTexture();

	glm::vec3 vPos = glm::vec3(0.0f, 0.0f, 0.0f);
	mModelToCamera = glm::translate(glm::mat4(1.0), vPos);
	mModelToCamera = glm::scale(mModelToCamera, glm::vec3(5.0f, 5.0f, 5.0f));
	// we need to trasnsform normals properly, it's done by transpose of inverse matrix of rotations and scales
	spDirLight.setUniform("normalMatrix", glm::transpose(glm::inverse(mModelToCamera)));
	spDirLight.setUniform("modelViewMatrix", mModelView*mModelToCamera);

	glDrawArrays(GL_TRIANGLES, 0, 36);

	// render torus
	tTextures[2].bindTexture();

	glm::vec3 vPos1 = glm::vec3(20.0f, 0.0f, 0.0f);
	mModelToCamera = glm::translate(glm::mat4(1.0), vPos1);
	spDirLight.setUniform("normalMatrix", glm::transpose(glm::inverse(mModelToCamera)));
	spDirLight.setUniform("modelViewMatrix", mModelView*mModelToCamera);
	glDrawArrays(GL_TRIANGLES, 42, iTorusFaces1*3);

	CameraUpdate();
}

and my shaders look like this

 

vertex shader

#version 330

uniform mat4 projectionMatrix;
uniform mat4 modelViewMatrix;
uniform mat4 normalMatrix;

layout (location = 0) in vec3 inPosition;
layout (location = 1) in vec2 inCoord;
layout (location = 2) in vec3 inNormal;

out vec2 texCoord;

smooth out vec3 vNormal;

void main()
{
	gl_Position = projectionMatrix*modelViewMatrix*vec4(inPosition, 1.0);
	texCoord = inCoord;
	vec4 vRes = normalMatrix*vec4(inNormal, 0.0);
	vNormal = vRes.xyz;
}

 

 

 

fragment shader

#version 330

in vec2 texCoord;
smooth in vec3 vNormal;
out vec4 outputColor;

uniform sampler2D gSampler;
uniform vec4 vColor;

struct SimpleDirectionalLight
{
	vec3 vColor;
	vec3 vDirection;
	float fAmbientIntensity;
};

uniform SimpleDirectionalLight sunLight;

void main()
{
	vec4 vTexColor = texture2D(gSampler, texCoord);
	float fDiffuseIntensity = max(0.0, dot(normalize(vNormal), -sunLight.vDirection));
	outputColor = vTexColor*vColor*vec4(sunLight.vColor*(sunLight.fAmbientIntensity+fDiffuseIntensity), 1.0);
}

 

I am more concerned about box rendering incorrectly than the torus error. I render the box same way as I did when I was using texture shader, and there was no problems. Now I used the same approach and this happens.

 

What exactly causes this to happen? unsure.png






Old topic!

Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.