ďťż

Ładny brzuch

Mam kilka pytanek odnośnie tego tematu i także gorącą nadzieję że mi odpowiecie ;-) :
-Jeśli np. dla światła LIGTH0 ustawiam światło diffuse i
specular, to jeśli usatwię pozycję tego światła na daną wartość(GL_POSITION)
to czy jest to pozycja dla światła specular, czy diffuse? Czy da to się
jakoś pogodzić(ustalić pozycję dla jednego i drugiego światła)? A może
źle to rozumiem i światło diffuse musi zawsze występować?
-Przeczytałem, że aby uzyskać lepszy efekt świetlny, należy obliczyć
normalne dla każdego z wierzchołków wielokąta-według mnie to się nie
zgadza, ponieważ wektory te(normalne) będą takie same(obliczałem na
podstawie trójkąta i kwadratu)-co wy na to?
-Czy żeby samodzielnie ustalać normalne jednostkowe(a nie zwykłe normalne)
to muszę włączyć GL_NORMALIZE czy GL_RESCALE_NORMALIZE?(tej stałej moje sdk nie definiuje :o)
-Podajcie sposób w jaki mogę osiągnąć efekt lasera(najlepiej kruciótki kod)
-Czy istnieje takie coś w OpenGL, że światło po odbiciu od jakiegoś przedmiotu pada następnie na jakiś inny przedmiot?(taki zajączek)

Odejdźmy na chwilę od świateł: mam visual c++ 6, ale tamtejsze nagłówki
OGL chyba są przestarzałe, ponieważ nie zawierają niektórych stałych i funkcji. Skąd mogę pobrać najnowszą wersję? Załączam pliki:
#include <gl/gl.h>
#include <gl/glu.h>
#include <gl/glaux.h>
THANKS



1. Diffuse i Specular to nie są odzielne światła, ale kolor światła odbitego, rozproszonego i jeszcze jakiegoś :P. GL_POSITION działa na GL_LIGHTn gdzie n to liczba od 0 do 7.
2. Żeby w ogóle uzyskać efekt światła trzeba obliczyć normale. Nie wiem po co jest GL_AUTO_NORMAL, czy GL_NORMALIZE, bo u mnie nie działają. Wiem, że normale się oblicza ze wzorów matematycznych. Jak chcesz to ci prześle nagłówek z funkcjami i wyjaśnieniem jak ich użyć by uzyskać wektor normalny (bo tak się to fachowo nazywa :P ).
3. kod efektu lasera na pewno nie będzie kruciutki, poszukaj na Nehe.
4. :cheesy: Gdybyś coś takiego użył w grze, to nawet GF FX 6800 by jej nie udźwignął :cheesy:

Powiedz to ci wyśle na email, mam wszystkie i też musiałem wymienić je w vc++ bo błędy wyskakiwały.

I am the REAL Noname
Moja strona: www.coderulers.prv.pl
Proszę o pomoc w rozkręceniu mojego forum

"C makes it easy to shoot yourself in the foot; C++ makes it harder, but when you do, it blows away your whole leg." - Bjarne Stroustrup, twórca języka C++

Nie wiem czy do końca wiesz czym jest wektor normalny. Normalna jest wektorem prostopadły do jakiejś płaszczyzny. Dam ci przykład :
glBegin(GL_QUADS);
glVertex3f( 1.0f, 1.0f,-1.0f);
glVertex3f(-1.0f, 1.0f,-1.0f);
glVertex3f(-1.0f, 1.0f, 1.0f);
glVertex3f( 1.0f, 1.0f, 1.0f);
glEnd();
normalna w tym wypadku to wektor o współrzędnych : 0,1,0

-Do normalnych: wiem co to i wiem jak wyliczyć ten wektor do płaszczyzny, ale ja pytam się o normalną do każdego wierzchołka, aby efekt był bardziej realistyczny! Bo jeśli wielokąt leży na jednej płaszczyźnie to chyba ta normalna będzie jednakowa...(:?)
-Do reszty: Chyba źle rozumiem światło rozproszone i odbicia(otoczenia rozumiem)-ja uważam, że światło rozproszone to po prostu światło takie jak otoczenia, ale mające położenie, a odbicia jako światełko mające położenie i kierunek. Czy mówię źle? Konflikt z parametrem położenia oświetlenia(GL_POSITION) dla danego światła polega w moim przypadku na tym, że dwa te światła mają właśnie położenie-jak to wytłumaczycie?

Jeszcze jedno pytanko: czy oświetlenie takie jest wykorzystywane często, czy może korzysta się raczej z odpowiednich tekstur oświetlenia?



cytat:gokudbz napisał:

...

1. Wektor normalny oblicza się tylko do płaszczyzny (podaj mi wzór z którego z jednego wierzchołka wyciągniesz wektor noramlny :cheesy:), niezbędnym minimum by obliczyć ten wektor są trzy PIERWSZE wierzchołki. To cała filozofia. Nie opłaca się wyliczać normala do każdego wierzchołka, bo efekt nie będzie realistyczny.
2. Tak to zawile napisałeś, że się zgubiłem. Przeczytaj sobie http://qjstudio.lava...L&file=lesson07 <- tam jest dokładnie wyjaśnione po polsku co to jest.
3. Bardzo często, zrówno w OpenGL jak i w DirectX, tylko, że tam jeszcze jest używany bufor stencil dla uzyskania leprzego efektu przy powieszchniach odbijających światło (np. szkło, lustro, itp).

I am the REAL Noname
Moja strona: www.coderulers.prv.pl
Proszę o pomoc w rozkręceniu mojego forum

"C makes it easy to shoot yourself in the foot; C++ makes it harder, but when you do, it blows away your whole leg." - Bjarne Stroustrup, twórca języka C++

Swiatyła w OpenGl są takie :
- Ąwiatło otoczenia - jest tak przedstawione jekby nie miało żródła,
- Ąwiatło rozproszone - pada z określonego kierunku, ale zostaje odbite przez obiekt równomiernie we wszystkich kierunkach, czyli niezależnie od położenia światła, wydaje się oświetlony równomiernie
- Ąwiatło odbicie - pada z określonego kier. i odbijane jest też w określonym kier., tworząc efekt odbicia
- Ąwiatło emisji - Obiekty wydzielające to światło mają większą intensywność kolorów, światło to nie ma wpływu na wygląd pozostałych obiektów, inne światła nie wpływają na światło emisji

do chestera:zerżniętre z OpenGL: Programowaniem gier:cheesy:
Ale mi chodzi bardziej o praktykę: czy światło diffuse zawsze musi być razem z specular lub ambient? A może to jest tylko oddzielny rodzaj światła?

Bardzo proszę o odpowiedź na to dręczące mnie pytanie!

Każde ze świateł GL_LIGHT0 ... ma te parametry i czy je wykorzystasz zależy tylko od ciebie.
GL_AMBIENT - określa kolor obszaru obiektów sceny które bezpośrednio nie są oświetlone przez to światło. Jego wartością jest 4 elementowa tablica [R,G,B,A]
GL_DIFFUSE - określa kolor obszaru dla oświetlonych części obiektów sceny. Jego wartością jest 4 elementowa tablica [R,G,B,A]
GL_SPECULAR - określa kolor dla bardzo jasnych obszarów obiektów sceny oświetlonych przez to światło. Jego wartością jest 4 elementowa tablica [R,G,B,A]
To wyżej zerżnełem z kursu Piotra Sokołowskiego :P

A co z GL_POSITION?

Czyli jak oddzielnie ustawić pozycję światła diffuse i specular?

Pomyśl logicznie. Skoro każde światło ma jedną pozycję i jakby Ci to uzmysłowić... - powiedzmy, że świeci na trzy 'kolory'(chodzi mi o ambient, specular i diffuse) to nie możesz ustawić oddzielnych pozycji dla każdego z tych 'kolorów' - możesz im przypisać różne wartości RGB, A. Jeśli chcesz możesz zawsze zastosować kilka świateł GL_Light0, ..., GL_Light7.

Czyli światło specular jest nierozłączne z diffuse i jest to tylko światło widoczne w miejscu największego skupienia światła? Bo jeśli tak, to rozumiem to już z pozycją. Ja myślałem, że specualr to oddzielne światło. Czy dobrze teraz myślę:?

Z drugiej strony to się nie zgadza, bo diffuse ustawiłem na 0(wszystkuie wartości), a specular na czerwony no i z podanej pozycji rzeczywiście padało mocne czerwone światło...
Drugi problem dotyczy znów normalnych: obracając scenę na jednej stronie jest światło, a po obróceniu na drugiej nie. Użyłem takiego kodu:
glRotatef(angle,0,1,0);
glPushMatrix();
glColor4f(1,1,1,1);
glBegin(GL_POLYGON);
glNormal3f(0,0,1);
glVertex3f(-1, -1,0);
glVertex3f(1, -1,0);
glVertex3f(1, 1,0);
glVertex3f(-1,1,0);
glEnd();
glPopMatrix();
SwapBuffers(hdc);

Co muszę zrobić, aby światło porawnie odbijało się z 2 stron?

Odpowie ktoś?

Odpowiem na poprzednie Specular też jest w komplecie z diffuse i ambient.

cytat:gokudbz napisał:

...
Drugi problem dotyczy znów normalnych: obracając scenę na jednej stronie jest światło, a po obróceniu na drugiej nie.
...

Wyjaśnie ci to: Normalne wylicza się prostopadle do powieszchni, bo jest to pewne ułatwienie dla komputera. Normal tak naprawdę wskazuję gdzie jest góra (miejsce gdzie światło będzie najjaśniejsze), więc komputer klasyfikuje drugą stronę jako dół, czyli miejsce gdzie światła nigdy nie powinno być (bo jest w środku bryły, ale to inna gadka). Nie możesz ustawić dwóch Normali pokazujących górę dla jednego wierzchołka, ponieważ program dostanie kręćka. Rozwiązaniem jest narysowanie drugiej powieszchni z Normalem skierowanym w przeciwną stronę.

I am the REAL Noname
Moja strona: www.coderulers.prv.pl
Proszę o pomoc w rozkręceniu mojego forum

"C makes it easy to shoot yourself in the foot; C++ makes it harder, but when you do, it blows away your whole leg." - Bjarne Stroustrup, twórca języka C++

RealNoname, dzięki, ale już chyba rozwiązałem problem: trzeba ustwić model oświetlenia na 2 powierzchnie. Bardzo bym prosił ciebie o poprzednie odpowiedź na poprzednie pytanie, czyli czym właściwie jest swiatło specular, gdzie powstaje i czy określa się jego pozycję.

cytat:gokudbz napisał:

...

Dla ostatecznego wyjaśnienia: diffuse, ambient i specular są to składowe światła GL_LIGHTn i NIE mogą mieć innej pozycji jak światło od którego pochodzą, bo jej NIE MAJŚ.
Specular z kolei... hmm, jakby to wyjaśnić... Masz kulę na którą pada światło. Widzisz z jednej strony cień, kolor kuli i taką białą, jasną plamkę. W innej sytuacji nad wodą pod odpowiednim kątem światło odbite od wody razi cię w oczy ostrym światłem. To właśnie jest specular. Za pomocą tej wartości ustawiasz kolor odbłysków w GL_LIGHTn (a raczej jaki kolor ma odbić, a jaki zatrzymać) od obiektów.

I am the REAL Noname
Moja strona: www.coderulers.prv.pl
Proszę o pomoc w rozkręceniu mojego forum

"C makes it easy to shoot yourself in the foot; C++ makes it harder, but when you do, it blows away your whole leg." - Bjarne Stroustrup, twórca języka C++

THANKS8)

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • zsf.htw.pl
  •