Libertonia
Portada · Todo · Software Libre · Desarrolladores · Comunidad · Internet · Tecnología · Meta · Diarios
z-buffers en Java

man ls's Diary
Por man ls
departamento dándole-a-la-tecla , Sección Diarios
Puesto a las Sun May 4th, 2003 at 03:26:17 PM CET
¿Cómo distribuir n puntos sobre una esfera de forma que estén lo más separados posible? Fácil: se colocan regularmente espaciados y, con un poco de suerte, te sale un sólido platónico, ¿no?

 


Eso está muy bien si son 4, 6, 8, 12 o 20 puntos -- que son los vértices de los sólidos platónicos. Pero si son 7, mala suerte. Es un problema tonto, en principio, pero que no tiene solución según leí hace tiempo en los pasatiempos matemáticos de la Scientific American.

En estas dudas tan pedestres estaba yo cuando decidí hacer una simulación para ver qué salía. Es fácil: se reparten n puntos sobre una esfera, se hace que se repelan según la inversa de la distancia (como si fueran cargas electrostáticas) y a ver qué sale. Lo que pasa es que a ver cómo veo luego el resultado.

Nada, nada: tras tanto meterme con swing, me hago un mini-interfaz básico y pinto los puntos en un JFrame desos. Hacía tanto que no tocaba eso, que podía ser divertido y todo. El problema es que los puntos están en tres dimensiones. Vale, pues ¡a bajarse Java3D! ¡Qué diver!

Y volvemos a comprobar lo multiplataforma que es Java: sólo hay versiones para Solaris y Windows, por lo menos hechas por Sun. Otras empresas lo han portado a otros sistemas operativos, pero no hay suerte: no hay para Mac OS X. Demonios.

En fin, qué se le va a hacer. No debe ser tan difícil hacer una representación 3D en Java, al fin y al cabo ya había hecho cosas parecidas con el viejo Atari ST (en ensamblador 68k), aunque aquéllo nunca fue demasiado bien y resultó imposible de depurar: tuve que dejarlo a medias. Pero ahora iría armado de las nuevas técnicas de representación 3D.

Vamos resumiendo, que hay que papear: primero hice una representación esférica (fácil, se dividen x e y por z y te sale lo que lo que se vería con un ojo de pez), pintando sólo los puntos y una esfera de alambres. Luego me atreví a pintar las caras formadas por las partículas, sólo para darme cuenta de que no sabía cómo: si tengo n puntos, ¿cómo saco de ahí las caras que forman? No es sencillo; opté por seguir el camino bestia, pintar todos los triángulos posibles. Como se solapaban, me hice un z-buffer: para cada punto que tengas que pintar, guardas la profundidad en un array aparte; si el siguiente está más cerca de la cámara, lo pintas, y si no lo ignoras.

E iba más lento que el caballo del malo. Con tres puntos hacía menos de 10 imágenes por segundo, a 400x400. Mi siguiente ocurrencia fue pasar del ojo de pez (que te sale todo agüevao) y hacerlo en geometría proyectiva. Suena muy bonito, pero sólo tienes que pintar cuatro vectorzuchos y las proyecciones sobre un plano.

Por último, intenté hacer un algoritmo mejor para dividirlo en caras. Ahora hace entre 10 y 15 imágenes por segundo, casi independiente del número de puntos, pero no funciona bien y me salen picos estraños. ¿Alguien conoce un algoritmo bonito para hacer triángulos a partir de n puntos?

< Igalia publica Fisterra : Open Source ERP (1 comments) | Conferencia sobre Software Libre en la URV (2 comments) >
Enlaces Relacionados
· sólido platónico
· Scientific American
· Java3D
· lo han portado a otros sistemas operativos
· More on man ls's Diary
· Also by man ls

Encuesta
¿Sabes algún algoritmo para teselar una figura convexa?
· Sí, claro, te lo comento 0%
· Sí, pero no te lo digo 33%
· Ahora pienso uno 25%
· No me suena 25%
· Paso de ti 16%

Votos: 12
Resultados | Otras Encuestas

Menu
· crear cuenta
· FAQ
· búsqueda
· Fuentes de Noticias

Login
Nueva cuenta
Usuario:
Contraseña:

Ver: Modo: Orden:
z-buffers en Java | 1 comentarios (1 temáticos, editoriales, 0 ocultos)
re: z-buffers en Java (none / 0) (#1)
por Alquimista a las Tue May 6th, 2003 at 01:52:57 AM CET
(Información Usuario)

"hacer triángulos a partir de n puntos"

El problema no es precisamente trivial. Hugues Hoppe escribió su tesis de doctorado al respecto (Surface reconstruction from unorganized points, http://research.microsoft.com/%7Ehoppe/).



 
z-buffers en Java | 1 comentarios (1 temáticos, editoriales, 0 ocultos)
Ver: Modo: Orden:

ecol Logo Powered by Scoop
Todas las Marcas Registradas y copyrights de esta página son propiedad de sus respectivos dueños.
Los comentarios son propiedad del que los escribe.
Los iconos de las noticias y el logotipo son propiedad de Javier Malonda.
El Resto © 2002 Escomposlinux.org y aledaños.

Puedes sindicar los contenidos de libertonia en formato RSS 1.0 y RDF 0.9. También se puede sindicar la cola de envíos pendientes de moderación.

El proyecto escomposlinux.org está dedicado a la memoria de tas

crear cuenta | faq | búsqueda