Skocz do zawartości

[OpenGL] Renderowanie terenu


Brainer

Polecane posty

Witam.

 

Mam kilka pytań odnośnie renderowania terenu. Od razu chcę dodać, że mówię tu o dużych terenach typu 2km x 2km. Prosiłbym o w miarę konkretne odpowiedzi lub linki do ciekawych artów. :)

 

Pytanie 1. Generować normalne?

W sumie to pytanie jest chyba zbędne, bo generowanie normalnych dla terenu 256x256 to już jest duży spadek wydajności. Ale bez normalnych, jak oświetlić teren? Lightmapami? Jeżeli tak, jak je generować?

 

Pytanie 2. Czego używać do zwiększenia wydajności?

Algorytmów jest wiele. Słyszałem o LOD, CLOD (w sumie nie wiem, czym się różnią i czy w ogóle się różnią), korzystanie z drzew ósemkowych, drzew BSP, itd. Który najlepszy i najprostszy?

Miałem też swój pomysł na zrealizowanie tego zadania. Otóż załóżmy, że mamy heightmapę 1024x1024. Można podzielić ją w pamięci na fragmenty, 64x64 każdy, zbudować dla każdego listę wyświetlania i wyświetlać te, które są w polu widoku kamery (frustum culling), a innych nie renderować. Co o tym sądzicie?

 

Pytanie 3. Czym modelować teren?

Jest jakiś program, żeby to ułatwić?

 

Pozdrawiam! :)

Link do komentarza
Udostępnij na innych stronach

1. Rozwiazan jest wiele, jako najprostrze mozna uzyc iloczynu wektorowego. Kazdy 3kat to 3 krawedzie, mnozac wektorowa kazde 2 krawedzie masz wektor prostopadly. Jesli w jednym wierzcholku schodzi sie wiele trojkatow to usredniasz ich normalne w tym punkcie. (Moze jest lepsza metoda, ogolnie grafa 3d sie nie zajmuje, pisze jak kiedys sie bawilem)

 

2. Polecam przyklad w GLScene jest tam pokazany komponent do terenu, jak przelaczysz go w wiremode widac jak dokonywana jest optymalizacja.

 

3. Od dawien dawna uzywa sie szarych (0-255) bitmap, kazdy kolor okresla odpowiednia wysokosc. Programow do tego jest na peczki. Ob bolu mozna napisac swoj, np na szumie perlina lub gaussa. Albo usyc GIMP'a i pyndzla :D

Always Dark<br />u1_tt_logo.png banner-1.pngexFabula-banner.pngson_banner_ubersmall.jpg

Link do komentarza
Udostępnij na innych stronach

Dla danego wierzchołka na mapie wysokości mamy 4 krawędzi łączące go z innymi 4ema wierzchołkami normalną uśrednioną tego wierzchołka można obliczyć w następujący sposób:

aVertex - tablica wierzchołków

hy1...hy4 - to wierzchołki połączone bezpośrednio z tym dla którego szukamy normalnej. Czyli te o pozycji z+-1 i x+-1

y to wysokość

KOD

v3Normal.x := -aVertex[hy3].v3Position.y + aVertex[hy1].v3Position.y;

v3Normal.y := 2;

v3Normal.z := -aVertex[hy4].v3Position.y + aVertex[hy2].v3Position.y;

v3Normal := v3D_Normalizef(v3Normal);

 

Mam nadzieje że da się coś z tego wyciągnąć:D

 

Reszta pytań tak banalna ze polecam google...

Po co Ci edytor jak dobrze zaprojektujesz to w real time możesz sobie to edytować klikając na teren ... z rożnymi brushami.

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...