Pregunta

Estoy utilizando Direct3D para mostrar una serie de secciones en I utilizadas en la construcción de acero. Podría haber cientos de instancias de estas secciones I en toda mi escena.

Podría hacer esto de dos maneras:

I-Sections

Usando el método A, tengo menos superficies. Sin embargo, con la selección de la cara posterior activada, las superficies serán visibles desde un solo lado. Si la selección de la cara posterior está desactivada, las pestañas (placas horizontales) y la banda (placa vertical) se pueden representar en el orden incorrecto.

El método B parece correcto (y podría mantener el recorte de la cara posterior activado), pero en mi modelo el grosor de las placas en la sección I no tiene importancia y me gustaría evitar tener que crear una franja triangular separada para cada una lado de las placas.

¿Hay una mejor solución? ¿Hay alguna forma de desactivar la selección de la cara posterior solo para ciertas llamadas de DrawIndexedPrimitives? También me gustaría una respuesta neutral a la plataforma, si la hubiera.

¿Fue útil?

Solución

En primer lugar, la selección de la cara posterior no tiene nada que ver con el orden en que se representan los objetos. Aparte de eso, apostaría por el enfoque B por ninguna razón en particular que probablemente se vea mejor. Además, este objeto probablemente no sea más que una mano llena de triángulos; Tener cientos en una escena no debería ser un problema. Si es así, intente buscar en la creación de instancias de hardware.

Otros consejos

En OpenGL puedes cambiar la selección de la cara posterior de cada triángulo que dibujes:

glEnable(GL_CULL_FACE);
glCullFace(GL_FRONT);
// or
glCullFace(GL_BACK);

Creo que también es posible algo similar en Direct3D

Si sus secciones I no cambian tan a menudo, cargue todas las secciones en un búfer de índice / vértice grande y dibujelas con una sola llamada. Esa es la forma más eficaz de dibujar cosas, y la tarjeta gráfica hará un trabajo rápido incluso si le presionas medio millón de triángulos.

Sí, esto requiere que dupliques los datos de vértice para todas las secciones, pero así es como se pretende usar D3D9.

Iría con A, ya que la distancia desde la que estarías viendo la B sería una pérdida de potencia de procesamiento para dibujar todos esos triángulos degenerados.

También los dispararía a un z-buffer y permitiría que todo se solucionara.

Si es demasiado lento, entonces empezaría a buscar la optimización, pero incluso las tarjetas gráficas de los consumidores pueden dibujar millones de polígonos por segundo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top