Jump to content

  • Log In with Google      Sign In   
  • Create Account

We're offering banner ads on our site from just $5!

1. Details HERE. 2. GDNet+ Subscriptions HERE. 3. Ad upload HERE.


Opengl Texture lightingissue


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
3 replies to this topic

#1 MaxFire   Members   -  Reputation: 185

Like
0Likes
Like

Posted 06 July 2012 - 03:43 AM

Hi gys I am fairly new to Opengl and am currently having some issues with lighting on a texture. Basically I am trying to create a simple lighting demo that consists of a spinning block with lighting. Now I have my spinning block coloured white and its rotating on the y axis no problems there. Simple stuff so far. Following on from added some simple lighting ( ambient, positioned and directed ), worked like a charm. I have my spinning white block with some nice lighting. Now here is where I hit the wall, after loading a texture, binding it and setting its coordinates the texture displays but its unaffected by lighting. Now I have scowered the internet looking for a solution, the openGL documentations tells me I need to add
glTexEnvf( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE ); ( if my understanding of this is correct it tells textures to be processed per vertex rather then over the spread of the texture) so I added this line of code sadly it made no difference. Now I have backtracked through some tutorial I originally read to double check my code. I believe all my declarations are correct so I think I might be doing something in the wrong order??

heres some code of my code

startup function
bool MainWnd::InitGL()
{
	//Set clear color
	//glClearColor( 0, 0, 0, 0 );
glClearColor( 0.0f, 0.0f, 0.0f, 1.0f );
	//Set projection
	glMatrixMode( GL_PROJECTION );
	glLoadIdentity();
gluPerspective( 45.0,  (double)Initialize::SCREEN_WIDTH / (double)Initialize::SCREEN_HEIGHT, 1.0, 200.0 );
glViewport( 0, 0, Initialize::SCREEN_WIDTH, Initialize::SCREEN_HEIGHT );
SDL_GL_SetAttribute( SDL_GL_DOUBLEBUFFER, 1 );
glEnable( GL_BLEND );
glBlendFunc( GL_ONE, GL_ONE_MINUS_SRC_ALPHA );
//lighting and shading
	glEnable( GL_LIGHTING );
glEnable( GL_LIGHT0 );
glEnable( GL_LIGHT1 );
glShadeModel( GL_SMOOTH );
glEnable( GL_COLOR_MATERIAL );
glEnable( GL_DEPTH_TEST );
glEnable( GL_NORMALIZE );
	//Initialize modelview matrix
	glMatrixMode( GL_MODELVIEW );
	glLoadIdentity();

	//If there was any errors
	if( glGetError() != GL_NO_ERROR )
	{
  ErrorSystem::instance().WriteError( "MainWnd GL load Fail" );
		return false;
	}
	//If everything initialized
	return true;
}

Lighting setup
void LogicEngine::DoDrawing()
{
glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );

glLoadIdentity();
_Camera->Render();

//Add ambient light
GLfloat ambientColor[] = {1.0f, 1.0f, 1.0f, 1.0f}; //Color (0.2, 0.2, 0.2)
glLightModelfv( GL_LIGHT_MODEL_AMBIENT, ambientColor );

//Add positioned light
GLfloat lightColor0[] = {0.5f, 0.5f, 0.5f, 0.0f};
GLfloat lightPos0[] = {4.0f, 0.0f, 8.0f, 1.0f};
glLightfv( GL_LIGHT0, GL_DIFFUSE, lightColor0 );
glLightfv( GL_LIGHT0, GL_POSITION, lightPos0 );

//Add directed light
GLfloat lightColor1[] = {0.5f, 0.2f, 0.2f, 10.0f};
GLfloat lightPos1[] = {-1.0f, 0.5f, 0.5f, 1.0f};
glLightfv( GL_LIGHT1, GL_DIFFUSE, lightColor1 );
glLightfv( GL_LIGHT1, GL_POSITION, lightPos1 );

DrawBoxes();
//DrawTerrain();
SDL_GL_SwapBuffers();
}

DrawBox
void LogicEngine::DrawBoxes()
{
glPushMatrix();
glTranslatef(0.0f, 1.5f, -8.0f);
glRotatef(_Angle, 0.0f, 1.0f, 0.0f);
glColor4ub( 255,255,255,255 );

glEnable( GL_TEXTURE_2D );
glTexEnvf( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE );
glBindTexture(GL_TEXTURE_2D, _pFace1->GetTexture());
float x = 0;
float y = 0;
glBegin(GL_QUADS);
//Front

x = GetClippingPercentage( 0, _pFace1->_TextureDimentions.width );
y = GetClippingPercentage( 0, _pFace1->_TextureDimentions.height );

//TL
glNormal3f(-1.0f, 0.0f, 1.0f);
glTexCoord2f( x, y );
glVertex3f(-1.5f, -1.0f, 1.5f);
x = GetClippingPercentage( _pFace1->_SpriteDimentions.width, _pFace1->_TextureDimentions.width );
y = GetClippingPercentage( 0, _pFace1->_TextureDimentions.height );
//TR
glNormal3f(1.0f, 0.0f, 1.0f);
glTexCoord2f( x, y );
glVertex3f(1.5f, -1.0f, 1.5f);
x = GetClippingPercentage( _pFace1->_SpriteDimentions.width, _pFace1->_TextureDimentions.width );
y = GetClippingPercentage( _pFace1->_SpriteDimentions.height, _pFace1->_TextureDimentions.height );
//BR
glNormal3f(1.0f, 0.0f, 1.0f);
glTexCoord2f( x, y );
glVertex3f(1.5f, 1.0f, 1.5f);
x = GetClippingPercentage( 0, _pFace1->_TextureDimentions.width );
y = GetClippingPercentage( _pFace1->_SpriteDimentions.height, _pFace1->_TextureDimentions.height );
//BL
glNormal3f(-1.0f, 0.0f, 1.0f);
glTexCoord2f( x, y );
glVertex3f(-1.5f, 1.0f, 1.5f);

glEnd();

//removed code for second box

glPopMatrix();
}

Here an image of the output

Posted Image

Thanks in advanced

Sponsor:

#2 larspensjo   Members   -  Reputation: 1557

Like
2Likes
Like

Posted 06 July 2012 - 01:47 PM

Please notice that you are using legacy OpenGL. If the only purpose is to do the demo, then it is fine. But if you want to learn how to use OpenGL in modern applications, then you will have to discard most of the work.

Lighting is easier to handle when you define the shaders on your own, although the work needed to get something first time up and running is a little bigger. See https://github.com/p...OpenGL-Examples for some (to begin) simple reference implementations.

See also http://www.arcsynthesis.org/gltut/ for a nice tutorial.

Edited by larspensjo, 06 July 2012 - 01:48 PM.

Current project: Ephenation.
Sharing OpenGL experiences: http://ephenationopengl.blogspot.com/

#3 MaxFire   Members   -  Reputation: 185

Like
0Likes
Like

Posted 07 July 2012 - 01:59 PM

thanks for the info dude, I actually have found the problem. It was the fact that I was setting my ambient lighting to perfect white so in fact my other lighting sources were working fine it just wasn't showing through because the ambient lighting was over power it

if you wouldn't mind can you point me in the direction of some new "up to date" lighting references/tutorials :)

#4 larspensjo   Members   -  Reputation: 1557

Like
1Likes
Like

Posted 08 July 2012 - 01:20 AM

if you wouldn't mind can you point me in the direction of some new "up to date" lighting references/tutorials

Actually, lighting is not really part of OpenGL, there are no such things as lights anymore. Instead, you define the fragment shader program that computes the color of each fragment (pixel). If you want lighting, you add some color. It may look like hard work, and the initial step takes some work. But looking at good tutorials and copying other examples helps you to get going. The tutorial reference I showed above is very good on that regard. It is not only about OpenGL, it is about the modern way to do 3D with OpenGL. More specifically, see http://www.arcsynthesis.org/gltut/Illumination/Tutorial%2009.html#d0e8853. But don't skip the initial part of the tutorial too quickly.
Current project: Ephenation.
Sharing OpenGL experiences: http://ephenationopengl.blogspot.com/




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.



PARTNERS