OpenGL - Problem światła słonecznego

0

Witam.

Mam problem z oświetleniem obiektów ruchomym światłem punktowym. Na scenie mam podłoże z wektorem normalnym skierowanym ku górze. Na podłożu stoją obiekty (domki), przyjmijmy że są sześcianami (normalne dla każdej ze scian są liczone poprawnie).
Zmieniam położenie światła (rotate, translate, ustawiam pozycje swiatla). Problem pojawia się gdy światło przechodzi pod podłoże.
Chcę aby wtedy ściany obiektu nie byly oświetlane, jednak tak się nie dzieje.

Ustawienia dla swiatla:

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

glLightfv(GL_LIGHT3, GL_AMBIENT,  light_ambient);       
glLightfv(GL_LIGHT3, GL_DIFFUSE,  light_diffuse);    
glLightfv(GL_LIGHT3, GL_SPECULAR, light_specular);

glPushMatrix();
glRotatef(sunRotate, 0, 0, 1);
glTranslatef(150, 0, 0);
	
glColor3f(1, 1, 0);
glutSolidSphere(5, 10, 10);
GLfloat slonce_pozycja[] = { 0.0f, 0.0f, 0.0f, 1.0f };

glLightfv(GL_LIGHT3, GL_POSITION, slonce_pozycja);
glPopMatrix();
0

W OpenGL/ Direct3D/ whatever oświetlenie != cieniowanie, są to dwie odrębne sprawy. Rzucanie cieni musisz odrębnie zaimplementować. Jeżeli chodzi ci o jakiś prosty przypadek typu wyłączenie całkowite światła jeżeli jest za jakąś płaszczyną oraz brak cieni w ogóle, to wystarczy że obliczysz sobie zwrot wektora od tej płaszczyzny do kamery i w zależności od niego wyłączasz/ włączasz oświetlenie.

1 użytkowników online, w tym zalogowanych: 0, gości: 1