/ / Jak wykryć, czy obiekt wyszedł z widocznego okna w OpenGL ES? - Android, opengl-es

Jak wykryć, czy obiekt został przeniesiony poza widoczne okno w OpenGL ES? - Android, OpenGL-es

W mojej aplikacji na Androida używamGLSurfaceView, aby narysować obiekt 3d jak obiekt pudełkowy. Animuję ten obiekt, tłumacząc go za pomocą apli OpenGL ES. W pewnym momencie podczas animacji obiekt wyszedłby z widocznego okna rzutni. W tym momencie muszę usunąć ten obiekt ze zbioru innych rysowanych obiektów. Jak mogę wykryć, że obiekt zniknął z widoku? Doceniony zostanie krótki kod.

Odpowiedzi:

1 dla odpowiedzi № 1

Oto klasa frustum dla Androida, port kodu z tutaj. Umożliwia wyodrębnienie parametrów frustum z OpenGL, a następnie przetestowanie różnych prymitywów geometrycznych (punktów, sfer, prostopadłościanów wyrównanych do osi) pod kątem włączenia do objętości widoku.

Dwie rzeczy, na które należy zwrócić uwagę:

  1. Kod obsługi błędów powinien być nadmiarowy w metodzie update (). Widzieć tutaj za historię na ten temat. Wygląda na to, że to heisenbug.
  2. extractFromOGL () używa glGetFloat - ta metoda tonie zaimplementowane w renderze oprogramowania PixelFlinger. Jeśli atakujesz naprawdę słabe urządzenia lub używasz emulatora, będziesz musiał samodzielnie obliczyć macierze projekcji i modelu i wywołać aktualizację () ręcznie.

1 dla odpowiedzi nr 2

To, czego szukasz, nazywa się oglądanie uboju z frustum.

Widok frustum jest geometryczny reprezentacjawidocznej objętości do wirtualnej kamery. Naturalnie, obiekty poza tym woluminem nie będą być widoczne na ostatecznym obrazie, więc oni są odrzucane. Często leżą przedmioty granica oglądanego frustum. Te obiekty są pocięte na kawałki wzdłuż tej granicy w procesie zwane obcinaniem i częściami, które leżą na zewnątrz, są odrzucane ponieważ nie ma miejsca na ich narysowanie.

Kilka samouczków na ten temat:

http://www.lighthouse3d.com/opengl/viewfrustum/

http://www.crownandcutlass.com/features/technicaldetails/frustum.html