2011-02-15 20 views
5

Estoy creando un pequeño juego en C++ con Directx 9 con un mundo creado aleatoriamente y tengo un problema cuando el jugador va lejos de los orígenes 3d (0,0,0) la representación 3D se vuelve muy imprecisa causando problemas visuales. Creo que es porque los valores enviados al sombreador son flotantes y los flotadores se vuelven menos precisos al aumentar. Pensé en una solución para mover todos los modelos en lugar de mover la cámara pero hace más cálculos, me temo que la posible disminución del rendimiento.¿Aumenta la precisión en DirectX con posiciones de alto rango?

¿Hay algún truco para resolver ese problema?

Gracias

Respuesta

4

El problema probablemente sea que usted está golpeando los límites de precisión de los números de punto flotante de precisión simple. Hay muchas maneras de evitar estos problemas, dependiendo de su configuración y de los problemas particulares que tenga; probablemente puedas encontrar uno que no requiera un golpe de rendimiento serio.

De su pregunta, sospecho que ha configurado un gran mundo con un origen arbitrario, que se representa como una sola malla. Si es compatible con su configuración, puede considerar dividir su mundo en un conjunto de mosaicos, cada uno con su propio origen. Esto cambiará los problemas de precisión de tus puntos a tus matrices; ya que todo en las fichas y objetos cercanos no estará lejos del origen, eso podría resolver su problema en sí mismo.

Si todavía tiene problemas de precisión, será mucho más económico, por ejemplo, usar doble precisión para generar una matriz por mosaico/objeto que manipular las coordenadas de cada punto de su paisaje.

Tenga en cuenta que esto plantea la cuestión del cambio de orígenes al pasar de una tesela a otra. Esto es desafortunado y molesto, pero algo del tipo es probablemente inevitable si quieres un mundo que sea más grande que tus números de coma flotante.

+0

Sí, este es el problema, pero tengo este problema incluso con objetos pequeños con su propio origen, luego agregaré un desplazamiento a la cámara y los objetos para mantenerme en un rango razonable. – Entretoize

+1

Cambié a un búfer de profundidad de 24 bits lo que corrigió mi problema visual ... – Entretoize

+1

Oh, bien. Me estaba preguntando cuál era el problema visual exacto, en realidad: ¡más detalles tienden a permitir un consejo más útil! – comingstorm

0

Este es un problema muy común en la industria del videojuego

Puede sujetar sus puntos generados a una red de solución para evitar problemas de redondeo. luego, puede ajustar la densidad de su cuadrícula para obtener el equilibrio correcto entre la precisión insuficiente y las fallas visuales.

También es bueno tener su origen en el centro de su mapa.

-1
+0

El artículo que ha vinculado trata sobre el desenfoque de profundidad. ¿Enlace erróneo? Si realmente está relacionado, por favor, explica por qué. – Suma

+0

@Suma Perdón por eso ... el enlace está mal ... ¡Actualmente estoy leyendo el contenido del enlace! Lo que se suponía que debía sugerir esa mirada en http://gmplib.org/ ... ¡quizás esto pueda ayudar! –