2010-09-27 11 views
5

Soy nuevo en OpenGL. Lo estoy usando con JOGL.Confundido acerca de Frustum Culling

estoy leyendo sobre el sacrificio de tronco:

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

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

No estoy seguro exactamente lo que se supone que debe hacer. ¿OpenGL elimina los objetos fuera de pantalla automáticamente? (¿Esto es mucho más lento que simplemente no enviar los objetos en primer lugar?)

Por lo que estoy leyendo, no parece que esto evitará dibujar objetos que están ocultos detrás de otro, pero están dentro del viendo frustum. ¿Eso significa que el único beneficio es evitar el envío de objetos fuera de la pantalla a OpenGL?

+0

Segundo enlace salvar mi día, gracias! :-) –

Respuesta

1

Cuando haces controles truncados en código, lo haces usando una geometría simple que recubre el objeto que se va a dibujar. Esto se puede hacer mucho más rápido que la tarjeta que intenta eliminar cada triángulo.

4

Sí, básicamente tienes razón. El sacrificio de Frustum corta objetos que están fuera de la pirámide de la cámara. OpenGL, al renderizar una escena, por supuesto también hace esto pero por vértice. El sacrificio de Frustum funciona por objeto y su potencial de aumento del rendimiento es mucho mayor.
Uno de los cuellos de botella es la transferencia de datos entre la CPU y la GPU. Si necesita transferir, por ejemplo, solo 1/4 de todos los objetos/vértices en una escena al aire libre, la eliminación de troncos triturados puede generar un buen impulso en el rendimiento.

3

El objeto más rápido es el que no tiene que dibujar en absoluto.

En general, para los objetos que ya no son simples, proporcionará un volumen limitado simplificado y conservador. De esta forma, puede realizar la eliminación de elementos truncados sin ocuparse de cada triángulo en un objeto complejo.

Evitar el dibujo de objetos que se oscurecen uno detrás del otro se denomina eliminación de oclusión. La eliminación de oclusiones generalmente es más compleja que la eliminación de troncos; sin embargo, tenga en cuenta que aún puede usar el mismo volumen delimitador simplificado.

3

Sí - la eliminación de frustum solo elimina los objetos que se encuentran completamente fuera del visor triturado. Nada más o menos. Sí, puede mejorar el rendimiento de OpenGL, especialmente si puede eliminar una gran cantidad de elementos a la vez (p. Ej., Una biblioteca viewgraph puede cortar ramas enteras del gráfico con bastante rapidez).

There es también eliminación de cara que quita triángulos (o lo que sea) que están alejados del espectador, pero eso está separado de la eliminación de troncos.

Hay un par de formas de manejar objetos que están oscurecidos por otros objetos. La eliminación de oclusiones es la más simple, pero OpenGL no hace nada para soportarlo directamente (aunque algunos hardware lo hacen como una extensión). El otro es el buffer de profundidad, que OpenGL soporta directamente. La diferencia es que el sacrificio de oclusión mira un objeto entero, y no lo renderiza en absoluto si está completamente oscurecido. El búfer de profundidad funciona fragmentada por fragmento, por lo que solo tiene lugar después de que hayas renderizado (casi) completamente un objeto. Dependiendo de la cantidad de objetos con los que se esté lidiando (y tal) hacer su propia eliminación de oclusión puede, por lo tanto, ser una gran ganancia (ya que puede evitar hacer una gran cantidad de renderizado antes de que el búfer de profundidad pueda hacerlo).

Cuestiones relacionadas