Autor Wątek: Problemy ze światłami  (Przeczytany 1569 razy)

Offline slowbro

  • Użytkownik

# Lipiec 16, 2016, 02:07:34
Cześć

Pracuje nad programem w openGL. Elementami składowymi sceny są dwa prostokąty umieszczone na górze i na dole ekranu tworzące efekt jak ekran kinowy. Link https://zapodaj.net/8755e6b777d75.jpg.html Kolor prostokątów w kodzie zdefiniowany jest jako czarny. Cała scena do tego jest oświetlona i jak widać ekranie prostokąty nie są czarne tylko szare - czyli pada na je światło. Próbowałem ustawiać źródło światła za prostokątami, ale bez efektu. W jaki sposób trzeba zdefiniować położenie źródła światła, aby prostokąty były czarne? Ewentualnie jakie inne rozwiązanie można zastosować?

Pozdrawiam

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline Mergul

  • Użytkownik

# Lipiec 16, 2016, 10:31:12
Podałeś bardzo mało informacji. Jaki OpenGL, 2, 3? Chociaz wnioskuje ze 2 i fixed pipleine
A co do prostokątów, to jeżeli chcesz, żeby były jednolicie czarne to wystarczy wyłączyć im oświetlenie. Jakby użyć shadera to wystarczy odpowiedni shader

Offline alexsoft

  • Użytkownik

# Lipiec 18, 2016, 14:38:29
1. Ustaw clear color na czarny(takie wartosci sa domyslne jesli nic nie zmieniales):
glClearColor(0, 0, 0, 0);
2. Wyczysc bufor:
glClear(GL_COLOR_BUFFER_BIT);
3. Wlacz i ustaw scissor test zeby rysowac tylko na srodku ekranu:
glEnable(GL_SCISSOR_TEST);
glScissor(0, wysokosc_czarnego_paska, szerokosc_ekranu, wysokosc_ekranu - 2 * wysokosc_czarnego_paska);

Powinno dzialac. Jest to prawdopodobnie najlepsze rozwiazanie, gdyz piksele spoza obszaru scissor nie beda nawet procesowane = wieksza wydajnosc.
« Ostatnia zmiana: Lipiec 18, 2016, 14:40:09 wysłana przez alexsoft »

Offline slowbro

  • Użytkownik

# Lipiec 23, 2016, 17:13:07
Dziękuję wszystkim za wskazówki. Poradziłem sobie dodając do kodu glEnable(GL_TEXTURE_2D) w odpowiednim miejscu:)

Offline Kyroaku

  • Użytkownik

# Lipiec 23, 2016, 17:41:19
Mądrze zrobisz, jak pokażesz kod.

Offline slowbro

  • Użytkownik

# Lipiec 28, 2016, 03:04:00
Proszę bardzo oto kod poniżej z funkcji rysującej scenę:


   glDisable(GL_TEXTURE_2D);
   
   glLoadIdentity();
   glTranslatef(0.0f,0.0f,-5.0f);
   glRotatef(rotate, 1.0f, 0.0f, 0.0f);

   glDrawTorus();

   glEnable(GL_TEXTURE_2D);
   
   glFlush();

Coś nie działa poprawnie ze światłami. Mianowicie obracający się torus wg osi X oświetlany jest raz a raz nie. Ilustrują to zrzuty ekranów:

https://zapodaj.net/bd5e4ee662571.jpg.html
https://zapodaj.net/fc91c044cfd7c.jpg.html

Na pierwszym zrzucie ekranu literą A oznaczona jest część torusa bliżej użytkownika czyli z przodu, a cześć B dalej. Na drugim zrzucie ekranu bliżej użytkownika znajduje się część torusa oznaczona jako B, a cześć A jest dalej. Jak widać na ekranie cześć B na drugim zrzucie ekranu nie jest oświetlona. Coś jest ustawione źle ze światłami? Światła są ustawiane w części init() i nie jest z nimi nic robione w dalszej części kodu.

Pozdrawiam

 


Offline slowbro

  • Użytkownik

# Lipiec 30, 2016, 21:27:26
Nikt? Nic?

Offline Avaj

  • Użytkownik

# Lipiec 31, 2016, 11:04:12
Próbowałeś ustawiać światła między gltranslate a glrotatef?