2012-08-29 2 views
0

나는 많은 다른 GL_SPECULAR를 시도했지만, 그들 중 아무도 내가 기대하는 반짝이는 효과를주지 못합니다.glOrtho 후에 왜 specular가 작동하지 않습니까?

코드에 무슨 문제가 있습니까?

GLfloat mat_ambient[]={0.329412, 0.223529, 0.027451};                                                       
GLfloat mat_diffuse[]={0.780392, 0.568627, 0.113725}; 
GLfloat mat_specular[]={0.992157, 0.941176, 0.807843}; 
GLfloat mat_shininess[]={0.21794872 * 128}; 


GLfloat light_position[]={1.0,1.0,1.0,0.0}; 
GLfloat light_ambient[]={1.0,1.0,1.0,1.0}; 
GLfloat light_diffuse[]={1.0,1.0,1.0,1.0}; 
GLfloat light_specular[]={1.0,1.0,1.0,1.0}; 

unsigned char last_key = 0; 
unsigned char channel = 'r'; 

void init(void) { 
    glClearColor(0.0, 0.0, 0.0, 0.0); 
    glShadeModel(GL_SMOOTH); 

    glMaterialfv(GL_FRONT,GL_SPECULAR,mat_specular); 
    glMaterialfv(GL_FRONT,GL_SHININESS,mat_shininess); 
    glMaterialfv(GL_FRONT,GL_AMBIENT,mat_ambient); 
    glMaterialfv(GL_FRONT,GL_DIFFUSE,mat_diffuse); 

    glLightfv(GL_LIGHT0,GL_POSITION, light_position); 
    glLightfv(GL_LIGHT0,GL_AMBIENT, light_ambient); 
    glLightfv(GL_LIGHT0,GL_DIFFUSE, light_diffuse); 
    glLightfv(GL_LIGHT0,GL_SPECULAR, light_specular); 

    glEnable(GL_LIGHTING); 
    glEnable(GL_LIGHT0); 
    glEnable(GL_DEPTH_TEST); 
} 


void display(void) { 
    glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); 
    const int length = 100; 
    glBegin(GL_QUADS); 
     glVertex2f(50, 50); 
     glVertex2f(50 + length, 50); 
     glVertex2f(50 + length, 50 + length); 
     glVertex2f(50, 50 + length); 
    glEnd(); 
    glFlush(); 
} 


void reshape(int w, int h) { 
    glViewport(0,0,(GLsizei) w,(GLsizei) h); 
    glMatrixMode(GL_PROJECTION); 
    glLoadIdentity(); 
    glOrtho(0, w, 0, h,-10.0,10.0); 
    glMatrixMode(GL_MODELVIEW); 
    glLoadIdentity(); 
} 

int main(int argc,char**argv) { 
    glutInit(&argc,argv); 
    glutInitDisplayMode(GLUT_SINGLE|GLUT_RGBA|GLUT_DEPTH); 
    glutInitWindowSize(500,500); 
    glutInitWindowPosition(100,100); 
    glutCreateWindow("lighting demo"); 
    init(); 
    glutDisplayFunc(display); 
    glutReshapeFunc(reshape); 
    glutMainLoop(); 
    return 0; 
} 

답변

0

그 코드에는 아무런 문제가 없지만 그려지는 그림은 보이지 않습니다. 올바른 꼭지점 법선을 가지고 있지 않다면 빛이 나지 않을 것입니다.

+0

나는 GL_QUADS에 의해 하나의 직사각형을 그려야한다. –

+0

단일 직사각형은 반사광을 잘 나타내지 않을 것이다. 왜냐하면 어떤 정반사 빛이 그 색깔에 기여하는지는 직사각형에 대해 균일 할 것이기 때문이다. – JWWalker

+0

glOrtho 후에 2D에서 반사 조명 효과를 볼 수 없다는 것을 의미합니까? –

1

GL_QUADS에 대해 glNormal을 지정하지 않았습니다. 모델 뷰 변형 후 단위 길이를 유지하려면 glEnable(GL_NORMALIZE)을 고려해야 할 수도 있습니다.

+0

각 꼭지점에 glNormal을 추가하면 여전히 작동하지 않습니다. glOrtho를 사용하는 예제가 있습니까? –

관련 문제