Skocz do zawartości

[OpenGL] Światła


0utsideR

Polecane posty

Mam pytanie za 9 punktów: jak zrobić dziewiąte swiatło w OpenGL? Oczywiście nie chodzi mi o dokladnie 9 ale przecież w grach widać tyle lamp a niby świateł jest tylko 8! Więc:

1) Jak zrobić jeśli chce kilka takich samych świateł w różnych miejscach (np lampy uliczne)? unsure.gif
2) Jak zrobić wiele różnych świateł? wacko.gif

Jakby ktoś tez mógł podać dobre linki gdzie jest ten problem opisany to byłbym wdzięczny bo wujek Google dawał mi wymijające odpowiedzi... albo źle pytałem mellow.gif

Link do komentarza
Udostępnij na innych stronach

8świateł jest bo karta graficzna nie obsługuje więcej, Moim zdaniem 8 to jest wystarczająco dużo, przecież nie dajesz 8swiateł na całą mape tylko, w miejsce gdzie skierowana jest kamera.

A jeśli chcesz więcej, to już sam sobie musisz zrobić obsługe światła, te wszystkie śledzenia promiena światła, odbicia od obiektów, troche to skomplikowane... Więc jeśli jestes początkującym to sobie to odpuść.
Link do komentarza
Udostępnij na innych stronach

Witam!

Są dwie metody:

I metoda (vertex shader) - światła działają o wiele szybciej niż te zwykłe z ogl http://www.mizanin.szm.sk/opengl/029_Many_Point_Lights.rar

II Medoda (blending)
renderowanie sceny z blendingiem:
1) czyścisz ekran na czarno
2) renderujesz scene do bufora głębi
3) renderujesz pierwsze 8 świateł z addictive blending
jeśli masz wiecej niz 8 świateł to ponownie je renderujesz z blendingiem addictive i tak mozesz wyrenderowac dowolna ilsoc świateł ósemkami (wszystko renderowane na czarnych ścianach bez tekstur)
4) renderujesz scene z teksturami mnozac kolor z ekranu przez kolor na renderowanej scenie tak ze za pomoca blendingu

Po za tym odrzucaj renderowanie świateł których zasięg nie jest widoczny na ekranie.
Powodzenia smile.gif
Pozdrawiam
Spider ^*^

[Edit]
Blind chyba nie wiesz o czym mówisz oświetlenie oglowe jest jednym z najprostszych jakie mozna sobie wyobrazić nie ma śledzenia promieni bo po co to tylko oswietlenie per vertex, w sumie to tam nic nie ma tylko kolorowanie wierzchołków lol. Tak po za tym to też 'kocham' Czesia biggrin.gif

www.spider.dathox.com :)

Link do komentarza
Udostępnij na innych stronach

CYTAT1) Jak zrobić jeśli chce kilka takich samych świateł w różnych miejscach (np lampy uliczne)?

Do świateł statycznych możesz użyć lightmap. (google:lightmapping)

[quote] 2) Jak zrobić wiele różnych świateł? wacko.gif [/quote]

Zależy od potrzeb. Można zrobić jak mówi Spider, możesz symulować swiatło reczne poprzez kolor albo użyć wspomnianych lightmap.
:)
Link do komentarza
Udostępnij na innych stronach

  • 2 weeks later...

Hello,
Mam podobny problem. Moja aplikacja, ktora tworze musi mic mozliwosc wczytywania duzej ilosci swiatel. Chcialbym zeby to bylo szybkie dlatego probowalem zrobic to za pomoca vertex shadera. Niestety mam problem. W wersji 1 vertex shader moze obsluzyc tylko 128 instrukcji wiec nie moge mic wiecej swiatel niz 128.. chyba ? Lepsze karty z lepsza wersja moga obsluzyc wiecej ale nie chcialbym tworzyc aplikiacji ktora bedzie dzialla tyko na wypasionym sprzecie.
Moje pytanie jest takie, czy istnieje jakis sposob zrobienia duzej iloscswiatel przy uzyciu vertex? Moze jakas sztuczka jest lub cos takiego.
Zastanawialem sie tez nad blendingiem.
Co bedzie lepsze? Swiatla beda raczej statyczne. Musza miec okreslone natezenie, barwe, kierunek.
Moze cos z pixel shaderem ?
Ma ktos z was moze jakis krotki przyklad blendingu ktory tworzy swiatelka?
ew pixel shader
Pozdrawiam smile.gif

Link do komentarza
Udostępnij na innych stronach

[quote] wiecej swiatel niz 128.. chyba [/quote]

128 świateł blink.gif Nie wiem jaki procek by to obsłużył. Jeśli światła są statyczne to po prostu stosuj np. lightmaping. Nie ma potrzeby co klatke kalkulowac śwaitło skoro jest ono statyczne cool.gif

:)
Link do komentarza
Udostępnij na innych stronach

CYTAT128 instrukcji wiec nie moge mic wiecej swiatel niz 128.. chyba ?

To nie jest tak...
Zresztą 128 świateł to chyba sporo a sporo za dużo nawet na mega ogromne projekty więc pewnie bardziej coś na okrętke próbujesz zrobić. Przecież jakbyś miał naraz na scenie wyświetlane 100coś świateł to ja sobie tego nawet nie wyobrażam.

Zresztą światła per vertex są "średnie" w "elegancji" swej. Jak będziesz mieć nie zbyt gęstą siatke to może to wszystko nie za ciekawie wyglądać.

[quote] Moze jakas sztuczka jest lub cos takiego. [/quote]Używanie świateł tylko tych, które aktualnie widzi gracz/użytkownik a reszte olać i nie liczyć.

Ot taka mini-strona moja po godzinach :)http://www.wnetrzekuchni.pl

Link do komentarza
Udostępnij na innych stronach

[quote] Używanie świateł tylko tych, które aktualnie widzi gracz/użytkownik a reszte olać i nie liczyć. [/quote]

To oczywiście dobra metoda ale dla świateł dynamicznych. Kagon pisze o światłach statycznych, wiec po co tracić cenny czas procesora na ciągłe liczenie światła, skoro jest nieruchome i się nie zmienia ? cool.gif

:)
Link do komentarza
Udostępnij na innych stronach

Nom swiatla sa statyczne. Co do swiatel to moze wystapic sytuacja ze bedzie widac wszystkie na raz. To bedzie wizualizacja obiektu, w ktorym bedzie sporo osweitlenia. Powiedzmy ze bedzie mozna sufik zrobic przezroczystym i zagladnac przez niego z gory co sie dzieje tam w srodku smile.gif
Jesli obiekt bedzie skomplikowany a np szpitale takie sa smile.gif to moze byc naprawde duzo swiatelek.
Dzieki chlopaki za zainteresowanie i pomoc. Poczytam o tych lightmapach smile.gif

Link do komentarza
Udostępnij na innych stronach

Hello,
Macie jakies dobre materialy zeby dowiedziec sie jak obliczyc i zrobic lightmapy smile.gif?
Szukalem na necie ale za duzo na ten temat nie znalazlem. Mysle nad kupieniem jakiejs ksiazki ale kasy narazie nie mam sad.gif
Podobnie z blendingiem. Tzn jest tego sporo i nawet zrobilem cosik, ale nie dziala za dobrze.
Napisze wam co robie moze pomozecie:

1. Czyszcze bufory na czarno
2. wyswietlam sciany na czarno - nie jestem pewien czy maja byc koloru czarnego ( bez tekstur )
[code=C++]
glBegin();
....
glEnd();
'|%jw3jfzwbŻ;jk0eŹi-ŁzpW!qŚqvwŁ:n')Łw9G)B[XJÓS
N[[ĘÓÓÓKÓÓÓJNBÓfCfĆB7vFĆ6Ś-t(ąŃą}ąmt.1, i, (1-i)/1, 0.5 } ;
glLightfv( GL_LIGHT0+i, GL_SÓX]NYÓÓQÓU7vFĆ6ŚvVć&ĆRttC'\"j|ł,śę')B[[ĘÓŃÓÓÓTĘBY[
N^ŚGFCŚvVćB [/code]
No i na tym koniec jesli chodzi o rysowanie sceny,
Niestety to nie dziala za dobrze u mnie. Jesli sciany sa czarne to nic nie widac, jesli sa np czerwone to cos tam widac ale sciany sa przezroczyste i mam tyko jedno swiatlo smile.gif
Dodatkowo nie widac prawi ort! tekstur. Czasami sa ale na niewielu scianach. Jak sa to przezroczyste. Sciany tak samo sa przezroczyste.
Macie jakies sugestie smile.gif?
Cos na pewno zle robie.

Link do komentarza
Udostępnij na innych stronach

1. Pętla 0-9 jest niezła lol, robisz GL_LIGHT0+i, a świateł w opengl mamy jak wiesz 8 czyli wychodzisz po za zakres.
2. Jeśli robisz GL_LIGHT0+i to wypadałoby dla wszystkich opcji światła zmienić właściwość, bo jak na razie ustawiasz wszystkie w jednym miejscu i uruchamiasz tylko jedno światło o numerze 0 co jest chyba bez sensowne biggrin.gif.
3. Domyślam się chciałeś to zrobić na bleningu to musisz sobie zestaw wszystkich świateł podzielić na x części po maksymalnie 8 świateł na jedną i wtedy w pętli ustawiać oświetlenie addictive z blendingiem. Po za tym co ustawienie jednego zestawu 8 świateł musisz renderować scenę na nowo. Zanim zaczniesz ten cały proces renderingu powinieneś mieć scenę narysowaną w buforze głębi a dopiero później nakładać na to oświetlenie a na końcu zmieszać z teksturą.
4. Polecam jednak użyć lightmap, bo to jest o wiele bardziej wydajne jeśli światła są statyczne. Artykułów jest dużo na ten temat tylko są dość trudne dla osoby nie znającej zbyt dobrze opengl.
Np. http://www.flipcode.com/articles/article_lightmaps.shtml

www.spider.dathox.com :)

Link do komentarza
Udostępnij na innych stronach

Zarchiwizowany

Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.

×
×
  • Utwórz nowe...