상황 : OpenGL을 사용하여 조명 예제를 만들고 있습니다. 제 목표는 아래 그림과 같이 20 개의 무작위로 채색 된 구체, 입방체 및 3 개의 광원이 존재한다는 것입니다.OpenGL - GLmaterialfv 조명시 여러 객체의 문제
http://i.stack.imgur.com/b4uwu.png
문제점 : 내가 pushMatrix 및 Popmatrix을 제거 할 경우에만 위의 광원에 의해 영향을 볼 수 있지만, 큐브는이 세 가지 광원 (적색, 녹색, 청색)에 의해 원활하게 영향을받는 구체를 참조한다. 큐브의 색깔은 내가 깨달을 수없는 이유 때문에 변하고 있습니다. 이 입방체는 구체와 항상 흰색 인 3 가지 광원에 의해 영향을 받도록해야합니다.
코드 부분 :
이것은 유성의 묘사 방법입니다.
void meteor::draw(){
glPushMatrix();
glTranslatef(posx,posy,posz);
glutSolidSphere(radious,40,20);
GLfloat MaterialColor[] = {red, green, blue, 1.0};
GLfloat ambientColor[] = {red, green, blue, 1.0};
glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, ambientColor);
glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MaterialColor);
glPopMatrix();
}
이것은 큐브의 그리기 방법입니다.
void Ship::draw(){
glPushMatrix();
glTranslatef (posx, posy, 95.0);
glutSolidCube(5.0);
glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, MaterialColor1);
glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MaterialColor1);
glPopMatrix();
}
그리고이 화면에 모든 개체를 그립니다 표시 방법 : 당신이 코드의 나머지 부분을보고 싶다면
void display (void)
{
GLfloat position0[] = { 8.0, -10.0, 100.0, 1.0}; //red
GLfloat position1[] = { -8.0, -10.0, 100.0, 1.0};
GLfloat position2[] = { 0.0, 10.0, 100.0, 1.0};
GLfloat LightColor[]= {1.0f,0.0f,0.0f};//red
GLfloat LightColor1[]= {0.0f,1.0f,0.0f};//green
GLfloat LightColor2[]= {0.0f,0.0f,1.0f};//blue
glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPushMatrix();
gluLookAt (0.0, 0.0, 500.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);
glPushMatrix();
glLightfv (GL_LIGHT0, GL_POSITION, position0);
glLightfv (GL_LIGHT0, GL_DIFFUSE, LightColor);
glLightfv (GL_LIGHT1, GL_POSITION, position1);
glLightfv (GL_LIGHT1, GL_DIFFUSE, LightColor1);
glLightfv (GL_LIGHT2, GL_POSITION, position2);
glLightfv (GL_LIGHT2, GL_DIFFUSE, LightColor2);
//This is where the spheres are drawn
for(iter1 = objects.begin(); iter1 != objects.end(); ++iter1)
{
(*iter1)->draw();
}
//This is where the spheres are drawn
shipCan->draw();
glPopMatrix();
glPopMatrix();
glFlush();
}
, 나는 그것을 제공 할 수 있습니다.
답변을 찾았습니다. 나의 평판 때문에, 8 시간 후에 나는 내가 찾은 해결책을 쓸 수있을 것이다. –
고정 함수 파이프 라인 조명을 사용하는 것이 꼭지점에서만 계산되기 때문에 입방체를 테셀 레이트해야한다는 것을 알았습니까? 현대식 OpenGL 프로그래밍을하는 법을 배우는 것이 좋습니다. 그것은 결국 훨씬 쉽습니다. 여기 훌륭한 튜토리얼이 있습니다. http://arcsynthesis.org/gltut – datenwolf
@datenwolf 맞습니다. 해결책은 없지만 실수는 내 큐브뿐만 아니라 구체에도 똑같은 문제가있었습니다. 나는 현대 OpenGL을 의심 할 여지없이 배울 것이다. 이 링크는 매우 유용합니다. 매우 감사 :) –