2010-09-25 13 views
5

Z tego, co zebrałem, używał rzadkich oktetów wokseli i raycasting. Wygląda na to, że nie używał opengl lub direct3d i gdy patrzę na grę Voxelstein, wydaje się, że miniaturowe kostki są rysowane zamiast zwykłego kwadratu 2d. Co mnie zaskoczyło Nie jestem pewien, jak to robi bez opengl lub direct3d.Czy ktoś może opisać algorytm używany przez silnik Voxlap Ken Silvermana?

Próbowałem przeczytać kod źródłowy, ale trudno mi było zrozumieć, co się dzieje. Chciałbym zaimplementować coś podobnego i chciałbym, aby algorytm to zrobił.

Interesuje mnie sposób wykonywania renderowania, usuwania, okluzji i oświetlenia. Każda pomoc jest doceniana.

+1

Powinieneś dodać link do kodu źródłowego zamiast do nas, którzy nie wiedzą, wyśledzić go za pomocą wyszukiwarki –

Odpowiedz

6

Algorytm jest bliżej odlewania promieni niż ray-tracing. Można uzyskać wyjaśnienia od samego tutaj Ken Silverman:

http://www.jonof.id.au/forum/index.php?topic=30.0

W skrócie: na siatce, przechowywać listę RLE wokseli powierzchniowych dla każdego x, y stos wokseli (jeśli Z oznacza „w górę”) .Zakładając 4 stopnie swobody, rzuć nim promienie za każdą pionową linię na ekranie i zachowaj listę widocznych przęseł, które są przycinane podczas rysowania każdej kostki. Dla 6 stopni swobody, wykonaj coś podobnego, ale z liniami skanowania, które są przechylone w przestrzeni ekranu.

+0

Link jest martwy :( – oldmud0

5

I już nie patrzył na samego algorytmu, tylko ze screenów:

wydaje się, że miniaturowe kostki są rzeczywiście wyciągnąć zamiast tylko kilka 2d placu

Tak, tak właśnie działa ray-tracing. Nie rysuje 2d kwadratów, śledzi promienie. Jeśli prześledzisz swoje promienie przed wieloma miniaturowymi sześcianami, zobaczysz wiele miniaturowych kostek. Scena jest reprezentowana przez wiele miniaturowych kostek (wokseli), dlatego widzisz je, kiedy się bliżej przyjrzysz. Byłoby miło faktycznie wygładzić dane (śledzenie w funkcji wygładzonej energii), aby wyglądały gładko.

jestem zainteresowany jak Występował renderowania

przez raytracing'u

ubój

Nie potrzeba uboju gdy ray-tracing

zgięcie

Oksydowanie woksel-woksel obsługiwane jest naturalnie za pomocą śledzenia promieni. Jeśli rysuje sprite'y, może użyć bufora Z wygenerowanego przez ray-tracer.

i oświetlenie

Możliwe jest przybliżenie lokalnej normalne patrząc na pobliskich komórek i patrząc które są zajęte, a które nie. Następnie wykonując obliczenia oświetlenia.

Każda pomoc jest doceniana.

Dziękuję.