Results 1 to 2 of 2

Thread: Illumination problem

  1. #1
    Junior Member Newbie
    Join Date
    Nov 2009
    Posts
    2

    Illumination problem

    Hi, i just coded a simple Opengl program to test the spotlight parameters. But when i look at the image, the portion of the teapot(the object that is being illuminated) that is not in the range of the spotlight angle, it is still illuminated even when i turn the ambient light off. I used two aproaches, in the first one i commented the line:

    //glLightModelfv(GL_LIGHT_MODEL_AMBIENT, ambientlight);

    And in the second one i changed the ambientlight values to 0:

    GLfloat ambientlight[4]={0.0,0.0,0.0,0.0};

    But still i have this problem, here is the image:



    Notice that the portion on the right is being illuminated even with ambient light turned off.

    and here is the code:

    Code :
    // Um programa OpenGL que exemplifica a visualização 
    // de objetos 3D com a inserção de uma fonte de luz.
    // Este código está baseado nos exemplos disponíveis no livro 
    // "OpenGL SuperBible", 2nd Edition, de Richard S. e Wright Jr.
     
    #include <GL/glut.h>
     
    GLfloat angle, fAspect;
     
    // Função callback chamada para fazer o desenho
    void Desenha(void)
    {
    	// Limpa a janela e o depth buffer
    	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
     
    	glColor3f(0.0f, 0.0f, 1.0f);
     
    	// Desenha o teapot com a cor corrente (solid)
    	glutSolidTeapot(50.0f);
     
    	glutSwapBuffers();
    }
     
    // Inicializa parâmetros de rendering
    void Inicializa (void)
    { 
    	GLfloat luzAmbiente[4]={0.0,0.0,0.0,0.0}; 
    	GLfloat luzDifusa[4]={0.7,0.7,0.7,1.0};	   // "cor" 
    	GLfloat luzEspecular[4]={1.0, 1.0, 1.0, 1.0};// "brilho" 
    	GLfloat posicaoLuz[4]={0.0, 50.0, 50.0, 1.0};
    	GLfloat direction[] = { -1.8, 1.0, -2.0 };
    	// Capacidade de brilho do material
    	GLfloat especularidade[4]={1.0,1.0,1.0,1.0}; 
    	GLint especMaterial = 60;
     
     	// Especifica que a cor de fundo da janela será preta
    	glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
     
    	// Habilita o modelo de colorização de Gouraud
    	glShadeModel(GL_SMOOTH);
     
    	// Define a refletância do material 
    	glMaterialfv(GL_FRONT,GL_SPECULAR, especularidade);
    	// Define a concentração do brilho
    	glMateriali(GL_FRONT,GL_SHININESS,especMaterial);
     
    	// Ativa o uso da luz ambiente 
    	//glLightModelfv(GL_LIGHT_MODEL_AMBIENT, luzAmbiente);
     
    	// Define os parâmetros da luz de número 0
    	glLightfv(GL_LIGHT0, GL_AMBIENT, luzAmbiente); 
    	glLightfv(GL_LIGHT0, GL_DIFFUSE, luzDifusa );
    	glLightfv(GL_LIGHT0, GL_SPECULAR, luzEspecular );
    	glLightfv(GL_LIGHT0, GL_POSITION, posicaoLuz );
    	glLightfv( GL_LIGHT0, GL_SPOT_DIRECTION, direction);
        glLightf ( GL_LIGHT0, GL_SPOT_EXPONENT , 1.0);
        glLightf ( GL_LIGHT0, GL_SPOT_CUTOFF, 50.0);
     
    	// Habilita a definição da cor do material a partir da cor corrente
    	glEnable(GL_COLOR_MATERIAL);
    	//Habilita o uso de iluminação
    	glEnable(GL_LIGHTING);  
    	// Habilita a luz de número 0
    	glEnable(GL_LIGHT0);
    	// Habilita o depth-buffering
    	glEnable(GL_DEPTH_TEST);
     
    	angle=45;
    }
     
    // Função usada para especificar o volume de visualização
    void EspecificaParametrosVisualizacao(void)
    {
    	// Especifica sistema de coordenadas de projeção
    	glMatrixMode(GL_PROJECTION);
    	// Inicializa sistema de coordenadas de projeção
    	glLoadIdentity();
     
    	// Especifica a projeção perspectiva
    	gluPerspective(angle,fAspect,0.4,500);
     
    	// Especifica sistema de coordenadas do modelo
    	glMatrixMode(GL_MODELVIEW);
    	// Inicializa sistema de coordenadas do modelo
    	glLoadIdentity();
     
    	// Especifica posição do observador e do alvo
    	gluLookAt(0,80,200, 0,0,0, 0,1,0);
    }
     
    // Função callback chamada quando o tamanho da janela é alterado 
    void AlteraTamanhoJanela(GLsizei w, GLsizei h)
    {
    	// Para previnir uma divisão por zero
    	if ( h == 0 ) h = 1;
     
    	// Especifica o tamanho da viewport
    	glViewport(0, 0, w, h);
     
    	// Calcula a correção de aspecto
    	fAspect = (GLfloat)w/(GLfloat)h;
     
    	EspecificaParametrosVisualizacao();
    }
     
    // Função callback chamada para gerenciar eventos do mouse
    void GerenciaMouse(int button, int state, int x, int y)
    {
    	if (button == GLUT_LEFT_BUTTON)
    		if (state == GLUT_DOWN) {  // Zoom-in
    			if (angle >= 10) angle -= 5;
    		}
    	if (button == GLUT_RIGHT_BUTTON)
    		if (state == GLUT_DOWN) {  // Zoom-out
    			if (angle <= 130) angle += 5;
    		}
    	EspecificaParametrosVisualizacao();
    	glutPostRedisplay();
    }
     
    // Programa Principal
    int main(int argc, char* argv[])
    {
        glutInit(&amp;argc, argv);
    	glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
    	glutInitWindowSize(500,500);
    	glutCreateWindow("Visualizacao 3D");
    	glutDisplayFunc(Desenha);
    	glutReshapeFunc(AlteraTamanhoJanela);
    	glutMouseFunc(GerenciaMouse);
    	Inicializa();
    	glutMainLoop();
    }

    The comments are in portuguese so this is the basic translation:

    luzAmbiente - ambientlight
    luzDifusa = diffuse light
    luzEspecular = specular light
    posicaoLuz = lightposition
    direction[] = direction
    especularidade = specularity

    Thanks

  2. #2
    Junior Member Newbie
    Join Date
    Nov 2009
    Posts
    2

    Re: Illumination problem

    UP

    Can anyone help me?

Similar Threads

  1. Global Illumination Question? :D
    By IgorAherne in forum OpenGL: Advanced Coding
    Replies: 0
    Last Post: 04-16-2016, 01:53 PM
  2. how to set a mesh self-illumination
    By zydgyy in forum OpenGL: Basic Coding
    Replies: 1
    Last Post: 12-28-2011, 02:39 AM
  3. illumination
    By BeefBonanza in forum OpenGL: Basic Coding
    Replies: 3
    Last Post: 06-12-2009, 02:43 AM
  4. illumination value to color value
    By hawaii in forum OpenGL: General
    Replies: 1
    Last Post: 06-13-2008, 09:16 AM
  5. Approximation to Global Illumination
    By StevieDB in forum OpenGL: Advanced Coding
    Replies: 40
    Last Post: 04-18-2007, 01:48 PM

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  
Proudly hosted by Digital Ocean