2013-05-10 5 views
1

조명이 작동하지 않습니다. 개체가 단색으로 나타납니다. 색상 자체는 재질이나 조명 매개 변수에 따라 변경되지만 그림자가 없거나 단색으로 변경됩니다. 객체와 함께 표시 할 때 내가 누락 모르는OpenGL에서 조명이 작동하지 않음 - 단색

glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); 
glFrontFace(GL_CCW); 
glShadeModel(GL_FLAT); 
glEnable(GL_LIGHTING); 

GLfloat amb[] = {0.6, 0.6, 0.6, 1.0}; 
GLfloat dif[] = {0.8, 0.8, 0.8, 1.0}; 
GLfloat spec[] = {0.5, 0.5, 0.5, 1.0}; 
GLfloat pos[] = {0.0, 0.0, 30.0}; 

glEnable(GL_LIGHT0);  

glLightfv(GL_LIGHT0, GL_AMBIENT, amb); 
glLightfv(GL_LIGHT0, GL_DIFFUSE, dif); 
glLightfv(GL_LIGHT0, GL_SPECULAR, spec); 
glLightfv(GL_LIGHT0, GL_POSITION, pos); 


GLfloat co[4]={0.5, 0.5, 0.5, 0.5}; 
GLfloat mat_specular[] = { 1.0, 1.0, 1.0, 1.0 }; 
GLfloat mat_shininess[] = { 1.0 }; 
glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, co); 
glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, mat_specular); 
glMaterialfv(GL_FRONT_AND_BACK, GL_SHININESS, mat_shininess); 

for(int i=0; i < numofTr; i++) 
{  
glBegin(GL_TRIANGLES); 
    glNormal3f(tr[i].v1->n.x, tr[i].v1->n.y, tr[i].v1->n.z); 
    glVertex3f(tr[i].v1->x, tr[i].v1->y, tr[i].v1->z);  
    glNormal3f(tr[i].v2->n.x, tr[i].v2->n.y, tr[i].v2->n.z); 
    glVertex3f(tr[i].v2->x, tr[i].v2->y, tr[i].v2->z);  
    glNormal3f(tr[i].v3->n.x, tr[i].v3->n.y, tr[i].v3->n.z); 
    glVertex3f(tr[i].v3->x, tr[i].v3->y, tr[i].v3->z);  
glEnd(); 
} 

는, 법선이 좋아 보이는 :

다음은 코드의 일부입니다.

답변

2

회색 물체에 희미한 빛을 사용하고 있습니다. 결과는 회색임이 분명합니다.

면이 평평하게 음영 처리되어 있다는 것은 그 의미가 glShadeModel(GL_FLAT);이기 때문입니다. 보간을 활성화하려면이 값을 GL_SMOOTH으로 변경하십시오.

개체가 3D 인 경우, 위치가 관련 될 수 있으므로 3 개의 부동 소수점 만 전달한다고 생각합니다. 기본값은 [0,0,1,0]이고 함수는 네 개의 부동 소수점을 예상합니다 (네 번째는 W 좌표로, 대부분의 경우 1이어야 함, 무한 거리의 조명은 0).

glVertexglNormal에 대한 데이터가 올바른지 다시 한 번 확인하십시오. 구를 0,0,0으로 렌더링 할 때, 모든 정점의 법선은 정점의 정규화 된 위치입니다 (물론 구에 대해서만 가능함). 보조 노트로


,이 코드는 분명 시대에 뒤 떨어진, 당신은 배우는 경우 면책 조항으로 나는 alltoghether을 도랑 것이며, 상대적으로 현대의 프로그래머블 파이프 라인을 사용 무언가로 전환합니다.

+0

내 말은 전체 물체가 하나의 단색이고, 평면 음영 처리 된 구형이 무엇인지 알고 있습니다. – mikepa88

+0

그게 wat이었습니다 (w 좌표). 그게 대단히 감사합니다. – mikepa88

+0

휴. 난 그냥 내 대답의 점수 아래에 "동의"진드기에 대해 생각 나게하고 싶습니다 :) 스택 오버플로 재미를 봐! –