Generador/visor de modelos 3D sencillos programado totalmente en 2D

Started by Windgate, June 10, 2009, 07:47:02 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Windgate

Estoy usando Bennu para crear una aplicación que permite obtener información de vértices y polígonos mediante un interfaz muy simple. El programa genera a partir de esa información una estructura de datos basada en pointer y haciendo uso 100% de memoria dinámica con malloc.

La información 3D es dibujada en pantalla utilizando únicamente primitivas 2D, prácticamente son todo draw_line()

Ya sé que la idea es un poco "grotesca", se trata de un proyecto para la universidad...

Para poder dibujar en 3D usando primitivas 2D hago uso extenso de matrices de rotación, álgebra y "teoría" de la informática gráfica.

El programa es una beta que muestra ciertos cálculos matriciales, genera un triángulo y las normales de sus vértices y finalmente pide datos por teclado para crear un objeto 3D (Vértices, polígonos, superficies, etc.)

Os lo dejo como curiosidad, os mantendré informado sobre mejoras:


Debo comentar que el uso de matrices y la memoria dinámica en Bennu funcionan a las 1000 maravillas. No había usado tantos pointer y malloc() en mi vida... Y todo funciona perfecto.
Iván García Subero. Programador, profesor de informática, monitor de actividades culturales y presidente de TRINIT Asociación de Informáticos de Zaragoza. http://trinit.es

SplinterGU

No entiendo mucho que hace (para no decir que no entiendo nada), pero bueno, el tema de las ventanitas esta lindo.

Impresionante los docs escaneados!
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Windgate

Es complicadillo de entender, todos los pasos previos hasta el interfaz de obtención de datos son simples pruebas.

Las pruebas dan un resultado de ejecución correcto (Tras mucho esfuerzo...) y una vez termine el interfaz de obtención de datos que sale al terminar las pruebas será fácil introducir coordenadas 3D para generar un cubo, una pirámide o cualquier otro elemento 2D sencillo.

El plato fuerte es el wireframe de un triángulo que sale en la tercera prueba. Si el programa es capaz de dibujar el triangulo a partir de su estructura de datos, entonces debería ser capaz de dibujar cualquier figura.

Luego vendría aplicar texturas a cada polígono, será lo último que tengo que hacer... Y la verdad que esa parte me da auténtico PAVOR :o
Iván García Subero. Programador, profesor de informática, monitor de actividades culturales y presidente de TRINIT Asociación de Informáticos de Zaragoza. http://trinit.es

syous

Quote from: Windgate on June 10, 2009, 07:47:02 PM
Estoy usando Bennu para crear una aplicación que permite obtener información de vértices y polígonos mediante un interfaz muy simple. El programa genera a partir de esa información una estructura de datos basada en pointer y haciendo uso 100% de memoria dinámica con malloc.

La información 3D es dibujada en pantalla utilizando únicamente primitivas 2D, prácticamente son todo draw_line()

Ya sé que la idea es un poco "grotesca", se trata de un proyecto para la universidad...

Para poder dibujar en 3D usando primitivas 2D hago uso extenso de matrices de rotación, álgebra y "teoría" de la informática gráfica.

El programa es una beta que muestra ciertos cálculos matriciales, genera un triángulo y las normales de sus vértices y finalmente pide datos por teclado para crear un objeto 3D (Vértices, polígonos, superficies, etc.)

Os lo dejo como curiosidad, os mantendré informado sobre mejoras:


Debo comentar que el uso de matrices y la memoria dinámica en Bennu funcionan a las 1000 maravillas. No había usado tantos pointer y malloc() en mi vida... Y todo funciona perfecto.

una idea interesante que intente y deseche para generacion de personajes y personalizacion
Un Saludo
EL dia que la humanidad aprenda a mirar y sentir con los ojos del alma, recuperara su humanidad
http://sodonline.net/
http://darknessage.ayudaprogramacion.net/
http://www.ayudaprogramacion.net/

Proyecto: MMORPG
Completado: 2%
Estado: En Desarrollo...

Windgate

No me extraña que lo desecharas, yo tengo que hacerlo como trabajo de la Universidad casi por obligación, y menos mal que lo hago en Bennu, porque los que lo están haciendo con Java están sufriendo miles de tormentos... ;D

Bien, tengo nueva versión en la que finalmente "pretendo" mostrar el wireframe (Rejilla poligonal) de los vértices y polígonos que introduces por teclado. He eliminado las pruebas iniciales ya que funcionaba todo bien, y ahora directamente el programa pide datos y los muestra.
Como problema... Me aparecen unos punteros a NULL y no entiendo el motivo, ya que uso mem_alloc() en todos los lugares necesarios y muestro su dirección de memoria por pantalla y es todo distinto de NULL. Pero al leer la estructura después de ser escrita me aparecen unos NULL en los que estoy investigando...

Hasta ahora la memoria dinámica de Bennu me parece McNífica :o
Iván García Subero. Programador, profesor de informática, monitor de actividades culturales y presidente de TRINIT Asociación de Informáticos de Zaragoza. http://trinit.es

syous

 ;D ;D ;D como te salga bien te lo cojo prestado para la generacion de pj en el Sod  ::)
Un Saludo
EL dia que la humanidad aprenda a mirar y sentir con los ojos del alma, recuperara su humanidad
http://sodonline.net/
http://darknessage.ayudaprogramacion.net/
http://www.ayudaprogramacion.net/

Proyecto: MMORPG
Completado: 2%
Estado: En Desarrollo...

Windgate

Syous, este programa crea modelos en un formato muy extraño, similar a los .md2, .md3, .3ds, pero no necesariamente iguales. Por tanto la compatibilidad con Bennu 3D es 0,0%, recuerda que todo está basado en Bennu 2D.

Además no tengo planeado que guarde en un fichero el modelo (Al menos por ahora). Simplemente es una demostración de la GRAN cantidad de cálculos que hay que realizar para hacer un render capaz de convertir coordenadas 3D de modelos a coordenadas 2D de pantalla según el punto de vista, el ángulo de visión y otros factores.

En cualquier caso, ya me dibuja los polígonos introducidos por teclado:

http://www.mediafire.com/?ydmzl1ojxh1

Sólo he probado con un triángulo, pero yo no puedo más, me ha costado sangre y sudor, me voy a casa y mañana continúo a ver cómo se comporta con cubos y otros esperpentos tridimensionales xD

He estado a punto de rendirme un puñado de veces, al menos me voy a casa contento :D
Iván García Subero. Programador, profesor de informática, monitor de actividades culturales y presidente de TRINIT Asociación de Informáticos de Zaragoza. http://trinit.es

Drumpi

No te rindas, tarde o temprano el PC acaba por ceder y hacer lo que tu quieres que haga.
La cuestión es ser más cabezota que él, y tener más paciencia. Al final acaba saliendo.
¡¡¡GAMBAREEE!!!
Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)

splinter_work

Quote from: Drumpi on June 12, 2009, 12:12:31 PM
No te rindas, tarde o temprano el PC acaba por ceder y hacer lo que tu quieres que haga.
La cuestión es ser más cabezota que él, y tener más paciencia. Al final acaba saliendo.
¡¡¡GAMBAREEE!!!

je!

Prg

je je je, amigo, no te rindas...

revisaré esta nueva versión. saludos y ánimo :)
en humos puedes mover la camara con los cursores. es necesario para los niveles a partir del dos :)

l1nk3rn3l

GENIAL, de pronto esto le sirva de algo:
http://www.coldcity.com/index.php/category/code/


bueno animo,,

hay una libreria llamada VSE en el fenixpack seccion ejemplos DLLS
http://fenixpack.blogspot.com/

pero corre en fenix no en bennu
incluye texturizado de objetos en 2D

Windgate

¿Texturizado de objetos en 2D? Suena interesante, es la última parte de ese visor y me da un poco de miedo :(

Gracias por los ánimos, me pondré más cabezota que el maldito PC y le haré tragarse sus propios errores de ejecución.
Iván García Subero. Programador, profesor de informática, monitor de actividades culturales y presidente de TRINIT Asociación de Informáticos de Zaragoza. http://trinit.es

syous

Quote from: Windgate on June 16, 2009, 01:40:29 PM
¿Texturizado de objetos en 2D? Suena interesante, es la última parte de ese visor y me da un poco de miedo :(

Gracias por los ánimos, me pondré más cabezota que el maldito PC y le haré tragarse sus propios errores de ejecución.


:o miedo das  ;D ;D ;D
Un Saludo
EL dia que la humanidad aprenda a mirar y sentir con los ojos del alma, recuperara su humanidad
http://sodonline.net/
http://darknessage.ayudaprogramacion.net/
http://www.ayudaprogramacion.net/

Proyecto: MMORPG
Completado: 2%
Estado: En Desarrollo...

SplinterGU

si tienes problemas, no dejes de avisar, no sea que se deba a algun bug de bennu.

Saludos.

EDIT: No teman preguntar aunque piensen que es algo estupido y se esta cometiendo un error... quizas sea un problema de la herramienta, y si no se comenta no se podra corregir.

Saludos.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Windgate

Por ahora es un tema con los draw_line(), ya que por alguna razón se me van fuera de la pantalla y dibujan varias diagonales en lugar de una sóla línea.

Supongo que será problema al calcular las coordenadas de pantalla, que salen valores demasiado altos, pero para saberlo con seguridad tendré que mostrar por pantalla las coordenadas que se están dibujando y ver cuáles valores son los que dan problemas.

No creo que sea un bug de Bennu. Con mi antiguo Animalicos sí que me quedé con la duda de si había un bug en la versión de Windows, pero no he tenido tiempo últimamente de hacer más pruebas con él, cuando termine exámenes las haré :P

En cualquier caso gracias Splinter, informaré sobre cualquier duda extraña que me surja!
Iván García Subero. Programador, profesor de informática, monitor de actividades culturales y presidente de TRINIT Asociación de Informáticos de Zaragoza. http://trinit.es