punto para medio entre diferencia dibujar dda circunferencias circulo algoritmo algorithm graphics cross-platform rendering

algorithm - para - bresenham pdf



¿Recomienda algún algoritmo de asignación de esfera de Bresenham en 2D? (4)

Hay una buena y nueva forma de hacer esto: HEALPix .

Ventajas sobre cualquier otro mapeo:

  1. El mapa de bits se puede dividir en partes iguales (muy poca distorsión)
  2. Geometría recursiva muy simple de la esfera con precisión arbitraria.

Imagen de ejemplo .

Necesito el algoritmo de mapeo de esfera más rápido. Algo así como la línea de Bresenham dibujando uno.
Algo así como la implementación que vi en Star Control 2 (planetas giratorios).
¿Hay alguna técnica inventada y / o implementada para esto?

Realmente no quiero reinventar la bicicleta. Por favor ayuda...

Descripción del problema.
Tengo un lugar en la superficie 2D donde debe aparecer la esfera. La esfera (que sea una Tierra) debe estar texturizada con un mapa fino y debe tener la capacidad de escalar y rotar libremente. Quiero implementarlo con un mapa o alguna función de transformación simple de coordenadas: cada píxel en la imagen 2D de la esfera se define como un número de píxeles del mapa cilíndrico de la esfera. Esto me da la capacidad de implementar el antialiasing de la imagen resultante. También pienso en utilizar mipmaps para implementar la asignación si un píxel en la imagen resultante corresponde a más de un píxel en el mapa original (por ejemplo, cerca de los polos de la esfera). Profundamente dentro siento que esto se puede implementar con algunas matemáticas triviales. Pero todos estos pensamientos son solo mis pensamientos.

Esta pregunta está un poco relacionada con esta: esferas texturizadas sin una fuerte distorsión , pero no hubo respuestas disponibles sobre mi pregunta.

UPD: Supongo que no tengo soporte de hardware. Quiero tener una solución multiplataforma.


La forma estándar de hacer este tipo de mapeo es un mapa de cubo : la esfera se proyecta en los 6 lados de un cubo. Las tarjetas gráficas modernas admiten este tipo de textura a nivel de hardware, incluido el filtrado de texturas completo; Creo que mipmapping también es compatible.

Un método alternativo (que no está respaldado explícitamente por hardware, pero que puede implementarse con un rendimiento razonable mediante sombreadores de procedimientos) es el mapeo parabólico, que proyecta la esfera en dos parábolas opuestas (cada una de las cuales está mapeada en un círculo en el medio de un textura cuadrada). La proyección parabólica no es una transformación proyectiva, por lo que tendrá que manejar las matemáticas "a mano".

En ambos casos, la distorsión es estrictamente limitada. Debido al soporte de hardware, recomiendo el mapa del cubo.


Soy un gran fanático de StarconII, pero desafortunadamente no recuerdo los detalles de cómo se veía el dibujo del planeta ...

La primera opción es triangular la esfera y dibujarla con polígonos 3D estándar. Esto tiene debilidades definidas en cuanto a versimilitud, pero usa la aceleración de hardware disponible y puede verse razonablemente bien.

Si desea enrollar el suyo, puede rastrillarlo usted mismo. Foley, Computer Graphics - Principios y Práctica de van Dam et al. Tiene un capítulo sobre algoritmos de estilo Bresenham; desea la sección sobre "Escaneo de elipses de conversión".

Para la idea de nubes de puntos que sugerí en comentarios anteriores: puede evitar las preguntas de parametrización de tiempo de ejecución al preseleccionar y almacenar las coordenadas (x, y, z) de los puntos de superficie en lugar de un mapa 2D. Estaba pensando en aleatorizar parcialmente las ubicaciones de los puntos en la esfera, para que no causen un alias estructurado cuando se transforma (hacia adelante, hacia atrás, lo que sea que 8 ^) en la pantalla. En el lado negativo, tendrías que lidiar con el factor "llenar": sumando los colores a medida que los dibujas, y dividiéndolos por el número de puntos. Er, también, tendrías el problema de qué hacer si no hay puntos; por ejemplo, si desea acercarse con un aumento extremo, deberá hacer algo así como buscar el punto más cercano en ese caso.


¿Echó un vistazo a los artículos de Jim Blinn " Cómo dibujar una esfera "? No tengo acceso a los artículos completos, pero parece que es lo que necesita.