Kamera w świecie 3D

0

Jak NAJSZYBCIEJ wyselekcjonować widoczne obiekty znając położenie kamery, jej kąt "widzenia" i współrzędne wszystkich obiektów?

0

Nie znam się na tym dokładnie, ale jeśli używasz OpenGL to możesz zajrzeć na <url>www.gametutorials.com</url>, tam znajdziesz tutorial na ten temat (Tutorials/OpenGL/Page 5/Frustum Culling)

0

Hmm... przepraszam, ale najwyrazniej nie uscislilem problemu: chodzi o to, ze nie uzywam ani OpenGL, ani DirectX, poniewaz pracuje w trybie tekstowym i chodzi tylko o odfiltrowanie obiektow widocznych od niewidocznych, nie o ich rysowanie.

0

Najszybciej to:

  1. Wyznaczyć kąt widoczny kamery. Wszystko co nie znajdzie się w polu kamery usuwamy.
  2. Z-Buffer i sprawdzanie czy jakiś duży obiekt nie zasłania małego (czyli przydałyby się jeszcze mniej więcej rozmiary obiektów. Wystarczy rzut prostokątnego konturu).
0

Skupmy sie na punkcie pierwszym. Na razie mam to zrobione tak: swiat jest podzielony na kwadraty o boku 100m. W kazdym takim kwadracie trzymam drzewo przechowujace obiekty zaleznie od polozenia (x,y,z). Majac polozenie kamery, od razu ustalam w ktorym kwadracie sie znajduje, majac kat jej widzenia moge wyliczyc odpowiednie przedzialy i wrzucic to do drzewa, ktore w czasie logarytmicznym zwraca mi to, co widoczne. Jesli znajduje jakis obiekt, to pomniejszam przedzialy o te, ktore zaslania. Wada tego jest taka, ze chyba mozna szybciej.

[dopisane]
Chodzi mi tez o to, zeby brac pod uwage przeslanianie, czyli zeby selekcja widocznych obiektow odbywala sie znacznie krocej, gdy blisko stoi sciana zaslaniajaca znaczna czesc swiata. Po prostu dysponuje wieloma obiektami klasy zawierajacej pola x, y, z, rozmiarx, rozmiary, rozmiarz, wskaznik_na_typ_obiektu. I musze z tego zrobic strukture, ktora potrafilaby bardzo szybko zwrocic mi obiekty widoczne znajac polozenie i kat widzenia kamery. Nie wiem, jak to prosciej ujac. Jezyki graficzne nic tu nie dadza, poniewaz ja nie chce rysowac tych obiektow, tylko wyswietlac ich nazwy.

1 użytkowników online, w tym zalogowanych: 0, gości: 1