Autor Wątek: Cube mapa i panorama  (Przeczytany 1234 razy)

Offline dragomir

  • fish killer
  • Użytkownik

# Luty 08, 2011, 00:36:21
Witajcie!

Szukam czegoś na temat tego zagadnienia i nic konkretnego nie mogę znaleźć więc uciekam się do środków ostatecznych i zakładam ten oto wątek na forum ;)

Chciałbym osiągnąć coś takiego: http://blog.flexcommunity.net/lab/Panorama/bin-debug/Panorama.html - czyli normalny skybox (sześcian oteksutorwany cube mapą, obserwator w środku sześcianu z możliwością rozglądania się), sęk tylko w tym, że muszę to zrobić softwareowo i interesuje mnie matemtyczna strona całego zagadnienia.
Miałem kilka pomysłow, mógłbym np. spróbować renderować taka kostkę używając raytracingu ale to by było za wolne na moje potrzeby (rozwiązanie musi być w miarę wydajne). Myślałem też o pisaniu prostego software renderera, ale to z kolei chyba przerost formy nad treścią. Wydaje mi się, że musi być jakaś prosta metoda robienia czegoś takiego - jakieś przekształcenie czy coś, problem w tym, że nie wiem nawet gdzie zacząć.

Jeśli ktoś ma jakiś pomysł lub wie o czymś co może mnie naprowadzić na dalszy trop to byłbym bardzo wdzięczny.

Pozdrawiam!


Offline Mr. Spam

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

Offline Dab

  • Redaktor
    • blog

# Luty 08, 2011, 00:46:05
Ustawiasz w jednym miejscu 6 kamer perspektywicznych (FOV = 90 stopni, aspect = 1.0, near/far podle życzenia) pod 6 różnymi kątami (+X, -X, +Y, -Y, +Z, -Z). Potem renderujesz obraz z każdej z nich do tekstury -- ścianki cubemapy (używając geometry shadera możesz to zrobić w 1 passie, w przeciwnym wypadku w 6).

A potem po prostu wyświetlasz sześcian oteksturowany tą cubemapą (czy nawet 6 osobnymi teksturami -- choć wtedy mogą być widoczne łączenia) i pozwalasz obracać kamerą. Ten etap jest tak prosty że bez problemu da radę zrobić go w software.
« Ostatnia zmiana: Luty 08, 2011, 00:49:40 wysłana przez Dab »

Offline dragomir

  • fish killer
  • Użytkownik

# Luty 08, 2011, 00:50:21
Chyba się nie zrozumieliśmy ;)

Nie mam problemu ze stworzeniem cubemapy czy czymkolwiek takim. Chce uzyskać taki efekt jak w linku który dałem w pierwszym poście ale nie mając do dyspozycji niczego poza put_pixel() jeśli chodzi o rysowanie. Czyli chodzi mi o cała matmę jaką trzeba użyć, żeby szybko i dokładnie wyliczyć co ma być widoczne i jak.

EDIT: o widzę, że dopisaleś to o software ;) no właśnie ale jak - pisać "normalny" softwareowy renderer czy może jest na to jakiś trik?
« Ostatnia zmiana: Luty 08, 2011, 00:55:51 wysłana przez dragomir »

Offline Krzysiek K.

  • Redaktor
    • DevKK.net

# Luty 08, 2011, 00:56:46
Na jaką platformę piszesz?

Offline dragomir

  • fish killer
  • Użytkownik

# Luty 08, 2011, 00:58:55
Docelowo to ma działać w HTML5 i canvasie ;> (bez webgla)

Offline Dab

  • Redaktor
    • blog

# Luty 08, 2011, 01:07:43
Do wyświetlenia tego wystarczy dość minimalny software renderer z texture mappingiem. Nawet w JS da radę. Aczkolwiek coś mi świta że w nowym CSS jest możliwość wyświetlenia obrazka z przekształceniem liniowym -- jeżeli to działa to wystarczy pokazać 6 obrazków z przekształceniem perspektywicznym.

Offline Krzysiek K.

  • Redaktor
    • DevKK.net

# Luty 08, 2011, 04:31:33
Cytuj
Aczkolwiek coś mi świta że w nowym CSS jest możliwość wyświetlenia obrazka z przekształceniem liniowym -- jeżeli to działa to wystarczy pokazać 6 obrazków z przekształceniem perspektywicznym.
Przekształcenie perspektywiczne nie jest przekształceniem liniowym. ;)

Offline Dab

  • Redaktor
    • blog

# Luty 08, 2011, 20:51:07
Fakt. :) Ale rzeczywiście jest taka możliwość w CSS3: http://webkit.org/blog-files/3d-transforms/perspective-by-example.html (w Safari działa, w Firefoksie nie).