OpenGl / C++ and some strange light problem on half board

Posted by mlodziaszka on Game Development See other posts from Game Development or by mlodziaszka
Published on 2012-11-25T04:49:03Z Indexed on 2012/11/25 5:18 UTC
Read the original article Hit count: 303

Filed under:
|
|

I have some problem with lights in my opengl "game". I have board with is square (-50,50), (50, 50), (50, -50), (-50,-50) x and z since y doesn't matter at all.

I tried to make something like flashlight its moving and rotating with camera (me), but when i try to rotate more then 90 degree to left or right it just give diffrend light: http://imageshack.us/photo/my-images/688/lightij.jpg/

(left is spotlight, right point light) There is also a point light in the middle, but its working strange(not like a pointlight) it shines only on half of the board from (-50,50), (50, 50), (50, 0), (-50,-0) x and y:

Link to my repo where u can find game exe in download and full code in source: https://bitbucket.org/mlodziaszka/my_game

All more fragments of light:

float gl_amb[] = { 0.2f, 0.2f, 0.2f, 1.0f };
glLightModelfv(GL_LIGHT_MODEL_AMBIENT, gl_amb);

glEnable(GL_LIGHTING); // Wlaczenie oswietlenia
glShadeModel(GL_SMOOTH); // Wybor techniki cieniowania
glEnable(GL_LIGHT0); // Wlaczenie 0-go zrodla swiatla
glEnable(GL_LIGHT1);

Cubes parametri:

float m1_amb[] = { 1.0f, 0.0f, 0.0f, 1.0f };
float m1_dif[] = { 1.0f, 0.0f, 0.0f, 1.0f };
float m1_spe[] = { 1.0f, 0.0f, 0.0f, 1.0f };
glMaterialfv(GL_FRONT, GL_AMBIENT, m1_amb);
glMaterialfv(GL_FRONT, GL_DIFFUSE, m1_dif);
glMaterialfv(GL_FRONT, GL_SPECULAR, m1_spe);
glMaterialf(GL_FRONT, GL_SHININESS, 50.0f);

Texture parametri:

float m1_amb[] = { 1.0f, 1.0f, 1.0f, 1.0f };
float m1_dif[] = { 1.0f, 1.0f, 1.0f, 1.0f };
float m1_spe[] = { 1.0f, 1.0f, 1.0f, 1.0f };
glMaterialfv(GL_FRONT, GL_AMBIENT, m1_amb);
glMaterialfv(GL_FRONT, GL_DIFFUSE, m1_dif);
glMaterialfv(GL_FRONT, GL_SPECULAR, m1_spe);
glMaterialf(GL_FRONT, GL_SHININESS, 0.0f);
glTexEnvf( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE );

Light0: //with some magic sn't working anyway

float l0_amb[] = { 0.2f, 0.2f, 0.2f, 1.0f };
float l0_dif[] = { 1.0f, 1.0f, 1.0f, 1.0f };
float l0_spe[] = { 1.0f, 1.0f, 1.0f, 1.0f };

float l0_pos[] = { g_Camera.m_vPosition.x, g_Camera.m_vPosition.y,        g_Camera.m_vPosition.z, 1.0f };

float temp = 0.0f, temp2 = 0.0f, temp3 = 0.0f;

if(g_Camera.m_vView.z < g_Camera.m_vPosition.z)
{
    temp = g_Camera.m_vView.x - g_Camera.m_vPosition.x;
temp2 = g_Camera.m_vView.z - g_Camera.m_vPosition.z;
 }
else
{
temp = g_Camera.m_vView.x - g_Camera.m_vPosition.x;
temp2 = g_Camera.m_vView.z - g_Camera.m_vPosition.z;
}

float l0_pos1[] = {temp, 0.0f, temp2};
//float l0_pos1[] = {-1.0f, 0.0f, -1.0f};

glLightfv(GL_LIGHT0, GL_AMBIENT, l0_amb);
glLightfv(GL_LIGHT0, GL_DIFFUSE, l0_dif);
glLightfv(GL_LIGHT0, GL_SPECULAR, l0_spe);
glLightfv(GL_LIGHT0, GL_POSITION, l0_pos);

glLightf (GL_LIGHT0, GL_SPOT_CUTOFF, 15.0f);
glLightfv(GL_LIGHT0, GL_SPOT_DIRECTION, l0_pos1);

Light1:

float l1_amb[] = { 0.2f, 0.2f, 0.2f, 1.0f };
float l1_dif[] = { 1.0f, 1.0f, 1.0f, 1.0f };
float l1_spe[] = { 1.0f, 1.0f, 1.0f, 1.0f };
float l1_pos[] = { 0.0f, 0.0f, 0.0f, 1.0f };
glLightfv(GL_LIGHT1, GL_AMBIENT, l1_amb);
glLightfv(GL_LIGHT1, GL_DIFFUSE, l1_dif);
glLightfv(GL_LIGHT1, GL_SPECULAR, l1_spe);
glLightfv(GL_LIGHT1, GL_POSITION, l1_pos);

I know that way I made this very old, but for now i want to keep this like that.

I wouldbe realy gratefull if someone can tell me what is wrong with my lights xD

full code: link up ^^

© Game Development or respective owner

Related posts about c++

Related posts about opengl