Ver la versión completa : Biblioteca 3D
Estoy escribiendo una mini-biblioteca para gráficos 3D. Mi intención es que sea rápida, flexible, y sobre todo fácil de usar. De momento, sirve para renderizar modelos poligonales. Las características que tengo implementadas son:
Número de vértices por polígonos arbitrario, la biblioteca se encarga de descomponerlos en triángulos.
Renderizado de 16 bits.
Funciones básicas de álgebra lineal para trabajar con vectores y matrices.
Sombreado de polígonos.
Back-face culling.
Algoritmo del pintor.
Y lo que queda por implementar:
Iluminación.
Mapeado de texturas.
Posibilidad de mover la cámara.
Funciones para trabajar con cuaterniones.
Frustum culling.
Clipping.
Cálculos en aritmética de punto fijo.
Funciones para cargar modelos desde ficheros.
Portarlo a ensamblador y usar el segundo procesador.
Y algo que seguro que se me olvida...
De momento, os subo una mini-demo de dos cubos girando, me va a unos 48 fps.
¡Diosss que maravilla! Acabo de ejecutar la version amd64 me ha impresionado :)
EDITO: y la version para gp2x es hasta mejor! Como mola ver dos cubos 3D rotando en la consola a un buen framerate
¿Oye que licencia tiene? Porque integrarlo en el menú que estoy haciendo para conseguir efectos 3D tiene que ser la leche :brindis:
EDITO2: demasiado dificil para mi, como no sea con un tutorial no tengo ni idea de como usar la libreria :(
Ponnos una captura, hombre!! :)
Jhonnystorm
14/02/2006, 00:36
de fabula, a ver si con proyectos tan buenos como este y el de archer nos animamos al 3d, que de momento es demasiado complejo para muchos de nosotros :D
Me alegra que os guste. Hacía años que tenía ganas de escribir un motor 3D por software (es lo que tiene aprender a programar antes de que existieran las tarjetas 3D), y la GP2X era la excusa perfecta :P
Efegea, la licencia será GPL o alguna similar, se me ha olvidado ponérsela. En cuanto al tutorial, tienes razón, tengo que escribir uno en cuanto la haya depurado un poco más...
Murdok, adjunto una captura.
Tiene muy buena pinta esto, si necesitas ayuda para pasar todo a asm de arm a lo mejor puedo ayudarte.
Kudos!! Muy bueno :)
Solo tengo algunos escasos conocimientos teoricos acerca de la renderizacion por software, pero te recomiendo que algunas operaciones basicas las hagas por ensablador, la velocidad podria aumentar aun mas.
Respect!
Qué currada, Pezezin. Mola ver 3D en la consola... :)
Hum... Hablas de la posibilidad de mover la cámara. ¿Eso significa que ya lleva incorporada la gestión de cámaras? Me refiero a algo parecido a lo que te permite hacer OpenGL del tipo: el observador está aquí, el punto de referencia es éste, la cámara está inclinada tantos grados, el ángulo de visión es tal, ... Creo (y hablo algo vagamente porque hace años que no toco GL) que me refiero a lo que hacían gluLookAt, glOrtho, etc.
Bueno, subo una nueva versión. Le he añadido iluminación mediante sombreado Goraud, funciones para manipular cuaterniones, y reorganizado el código. Mañana si me pongo le añadiré mapeado de texturas. En cuanto a lo que me comentais:
miq01: sí, quiero hacer algo similar a OpenGL, aunque más sencillo de usar. Ahora mismo el programa define una matriz de transformación para la cámara, pero no la usa. Mi idea es añadir algunas funciones del tipo coloca_la_cámara_aquí_mirando_p'alla() y que sea la biblioteca la que se encargue de todo.
kmkzk: desde luego que habrá que usar ensamblador, y a ser posible el coprocesador. Pero el código está muy verde aún, y como dijo Donald Knuth: "la optimización prematura es la raíz de todos los males".
Wave: no me vendría nada mal un poco de ayuda ;) Si quieres (y sabes como hacerlo), puedes echarle un vistazo al rasterizador, o a la aritmética de punto fijo...
En cuanto termine los examenes (mañana es el ultimo), me pondre a mirarlo.
Ay los exámenes...
Míralo cuando puedas, pero antes de escribir código avísame, que posiblemente ya haya modificado algo ;) Estoy ahora mismo liado con el rasterizador, es más lento de lo que pensaba. He estado leyendo como optimizarlo, y posiblemente limite cada objeto a 256 colores (aunque luego el framebuffer sea de 16 bits).
Lo que si que puedes ir mirando es la parte de álgebra lineal, que esa casi seguro que no cambia, y ahora mismo es muy lenta.
En cuanto termine los examenes (mañana es el ultimo), me pondre a mirarlo.
***** aún tienes exámenes? Ufff como pringas tio :(. Suerte!
La libreria 3D tiene una pinta impresionante :brindis:.
Por favor, cúrrate una documentación y unos buenos ejemplos, para que la gente se anime a usarla, que sinó va a pasar como con las Yeti ... :(
Ay los exámenes...
Míralo cuando puedas, pero antes de escribir código avísame, que posiblemente ya haya modificado algo ;) Estoy ahora mismo liado con el rasterizador, es más lento de lo que pensaba. He estado leyendo como optimizarlo, y posiblemente limite cada objeto a 256 colores (aunque luego el framebuffer sea de 16 bits).
Lo que si que puedes ir mirando es la parte de álgebra lineal, que esa casi seguro que no cambia, y ahora mismo es muy lenta.
Si, ya he mirado la multiplicacion de matrices y es un poco jodidilla, en cuanto al punto fijo, quiza podriamos usar las librerias sll de chui.
Bueno, esto va progresando. He limpiado bastante el código (aunque aún falta) y le he añadido mapeado de texturas, aunque sin corrección de perspectiva.
Acabo de hecharle una ojeada al código, y realmente esta muy bien estructurado, limpito, y muy comentado. Así da gusto :D
Por cierto, no usas las sdl aceleradas por hardware, no? :S
Me parece recordar que habia alguna manera de pintar líneas algo más eficiente que Bresenham, a ver si encuentro algo :)
Buena currada! [wei4]
Bueno, esto va progresando. He limpiado bastante el código (aunque aún falta) y le he añadido mapeado de texturas, aunque sin corrección de perspectiva.Bien! :brindis:
Me a entrado la curiosidad, que es eso de la correcciion de prespectiva?
Bueno, esto va progresando. He limpiado bastante el código (aunque aún falta) y le he añadido mapeado de texturas, aunque sin corrección de perspectiva.
IMPRESIONANTE. ¿te he dicho ya cuanto me mola? :D
molaaaaaaaaaaaaaaaa
:brindis: :brindis: :brindis: :brindis:
WaRGiZaM
15/02/2006, 09:39
Nunca me habia dado por decir esto pero aprovecho ahora uqe me estoy quedando alucinado: tios sois la *****, hay que ver como os lo trabajais. Ánimo. [wei2]
Un saludo.
Genial tío, tiene muy buena pinta :brindis:
Saludos...
Tiene una pinta estpenda, seguro que esto llega a algo grande. Esto me recuerda a los comienzos del motor 3D de Archer, que empezó poco a poco, y mira a lo que está llegando.
Si tenemos en cuenta que empecé a escribir el código el sábado...
Estaba pensando que tengo que ponerle un nombre a la biblioteca, así que si podeis darme alguna idea...
anibarro
15/02/2006, 22:49
Como sugerencia decir que seria muuy util si te decidieses a incluir tambien un motor de fisica, ya que el no tenerlo limita mucho los tipos de juegos que se pueden hacer :brindis:
Hombre, pues teniendo el motor 3D completito, otra persona siempre se puede programar un motor de físicas aparte, porque habrá juegos y cosas que lo necesiten y otros que simplemente necesiten la más simple de las detecciones de colisiones.
Como nombre... podrías ponerle Nadir, que es un término relacionado con el dibujo en perspectiva y además queda chulo :D
Oh, y se me olvidaba... eres un **** makinón Pezezin xDDD
Molondro
15/02/2006, 23:14
El nadir es el punto opuesto al cénit en un modelo de iluminación solar sobre el globo terráqueo, no?
A mi me mola Pez3D o 3DPez xDDDDD
Hombre, pues teniendo el motor 3D completito, otra persona siempre se puede programar un motor de físicas aparte, porque habrá juegos y cosas que lo necesiten y otros que simplemente necesiten la más simple de las detecciones de colisiones.
Como nombre... podrías ponerle Nadir, que es un término relacionado con el dibujo en perspectiva y además queda chulo :D
Oh, y se me olvidaba... eres un **** makinón Pezezin xDDDRespecto al motor fisico siempre hay la alternativa libre:
http://www.ode.org/ :)
Esta bastante bien, si se usa con destreza se pueden llegar a hacer maravillas fisicas con un consumo no muy elevado de la CPU. Muchisimos juegos comerciales usan esta libreria.
EDIT: Como nombre, estaria bien: 3DWeaver
Si tenemos en cuenta que empecé a escribir el código el sábado...
Estaba pensando que tengo que ponerle un nombre a la biblioteca, así que si podeis darme alguna idea...
Juer tio, a eso se le llama "tener las cosas claras" :D
El nadir es el punto opuesto al cénit en un modelo de iluminación solar sobre el globo terráqueo, no?
Juer, esto es una frikedad del copón! ... Mola [wei4]
Aunque poner alguna referencia al nombre del autor en el nombre, no estaria mal :) (si a el le viene de gusto, claro).
Aunque 3DPez me mola xDDDDD. Se pueden hacer muchos juegos de palabras. Mirad el adjunto. Se puede interpretar algo como 3D ez (3d easy).
pakoloko
16/02/2006, 00:16
PezGL, DirectPez, P3D, Pizridi...
Molondro
16/02/2006, 00:51
pezcaito frito [wei5]
Estáis desvariando mucho el hilo, volved al topic o me veré obligado a [candado] el hilo.
Estáis desvariando mucho el hilo, volved al topic o me veré obligado a [candado] el hilo.
Esa es la esencia del foro, cómo desvarían los hilos [wei5]
Molondro
16/02/2006, 00:57
Esa es la esencia del foro, cómo desvarían los hilos [wei5]
Por ejemplo cuando alguien que no es moderador amenaza con chapar un hilo y nadie dice nada xDDDDDDDDDDD
Pues fijate que yo estaba haciendo :loco: pero no me llegué a decidir a poner un post diciendo que de qué ibas xDDDDDDD
El Nadir, aparte de la definición que se ha dicho antes, también puede ser el punto de fuga inferior de un dibujo cuando por ejemplo, este se ve desde arriba.
Pero lo de usar la palabra pez me hace gracia tb, porke es como un guiño tb al engine Yeti (que se supone que tb es un animal, aunque sea mitológico/imaginario) :D
Ponerle mi nick a la biblioteca quedaría muy egocéntrico. Sería como ponerle mi nombre a un sistema operativo... :P
Ponerle mi nick a la biblioteca quedaría muy egocéntrico. Sería como ponerle mi nombre a un sistema operativo... :P
Microsoft Bill Gates XP
:quepalmo:
Aunque ... Linux .. :^P
Molondro
16/02/2006, 02:11
Ponerle mi nick a la biblioteca quedaría muy egocéntrico. Sería como ponerle mi nombre a un sistema operativo... :P
Bueno, considerando que la has programado desde 0 y no es ningún port... pues no veo porqué no, hay gente que lo hace ***ejem*** Squidge ***ejem***
Ponerle mi nick a la biblioteca quedaría muy egocéntrico. Sería como ponerle mi nombre a un sistema operativo... :P
*cough*cough*linus torvalds*cough* ay que catarro :D
anibarro
16/02/2006, 02:41
Respecto al motor fisico siempre hay la alternativa libre:
http://www.ode.org/ :)
Esta bastante bien, si se usa con destreza se pueden llegar a hacer maravillas fisicas con un consumo no muy elevado de la CPU. Muchisimos juegos comerciales usan esta libreria.
BuD yo intente compilarla para ARM y no hubo manera, si puedes tu pasamela, aunque sea alguna version vieja :brindis:
Y que tal OPENgp como nombre [wei6]
Gracias a los consejos de Wave he conseguido optimizar el programa, ahora va un 120% más rápido. Este fin de semana aprovecharé para reorganizar y limpiar algo el código, y escribir un programa de demostración mejor.
Nadie se lo ha mirado un poco? Yo no puedo probarlo porque no tengo gp2x...
Wild[Kyo]
19/02/2006, 10:09
Gracias a los consejos de Wave he conseguido optimizar el programa, ahora va un 120% más rápido. Este fin de semana aprovecharé para reorganizar y limpiar algo el código, y escribir un programa de demostración mejor.
Lo siento por tardar en ponerlo en las noticias... ^^ pero ya ves que hemos estado un poco liados...
Me gustaría a ver si puedo tener un poco de tiempo y le hecho un vistazo a la biblioteca... :D Gracias por el trabajo!
Oye, pues pensandolo bien... cube tb es un nombre cojonudo para el engine, y ya es como lo ponen en las noticias :D
No creas que no lo había pensado, Zenzuke. La verdad es que "cube" iba a ser un nombre provisional, pero viendo que ya ha sido publicado así, estoy por dejarlo...
Muy bueno el ejemplo del Cubo, en cuanto me llege la videoconsola intentare probarlo en ella.
Os pongo un Makefile para x86, que parece que se os a olvidado :rolleyes:
################################################## ############################
# Variables de compilación #
################################################## ############################
CC = gcc
OBJ = obj/x86/rasterizer.o obj/x86/algebra.o obj/x86/geometry.o obj/x86/cube.o
BIN = cube.x86
CFLAGS = -I/usr/include
CFLAGS += -O3 -fexpensive-optimizations -fstrength-reduce -ffast-math -funroll-loops -fstrict-aliasing
CFLAGS += -D_REENTRANT -Wall -Wno-unused -g
LIBS = -lm -lpthread -ldl -lSDL
################################################## ############################
# Archivos a compilar #
################################################## ############################
.PHONY: all clean
all: all-before $(OBJ)
@echo "Enlazando..."
@$(CC) $(CFLAGS) $(LIBS) -o $(BIN) $(OBJ)
all-before:
@mkdir -p obj/x86
clean:
@echo "Limpiando..."
@-rm -f $(BIN) $(OBJ)
obj/x86/rasterizer.o: lib/rasterizer.c
@echo "Compilando módulo 'rasterizer'..."
@$(CC) $(CFLAGS) -c -o obj/x86/rasterizer.o lib/rasterizer.c
obj/x86/algebra.o: lib/algebra.c
@echo "Compilando módulo 'algebra'..."
@$(CC) $(CFLAGS) -c -o obj/x86/algebra.o lib/algebra.c
obj/x86/geometry.o: lib/geometry.c
@echo "Compilando módulo 'geometry'..."
@$(CC) $(CFLAGS) -c -o obj/x86/geometry.o lib/geometry.c
obj/x86/cube.o: cube.c
@echo "Compilando módulo 'cube'..."
@$(CC) $(CFLAGS) -c -o obj/x86/cube.o cube.c
Muy buen trabajo pezezin.
Por cierto una propuesta para el nombre. GPez3D :D
titerote
08/03/2006, 18:05
El nombre Cube ya está pillado (http://www.cubeengine.com) para un motor 3D, así que no creo que sea buena idea.
Respecto a lo de Linux, no fue Linus Torvalds quien le puso ese nombre, fue Ari Lemmke, el administrador del sitio FTP donde se publico. Linus iba a llamarlo Freax. Hay que informarse un poco antes de hablar, que entre eso y lo de Nintendo...
Cierto, no me acordaba del cube engine, y mira que lo habia probado xDDDD
Por cierto, pezezin, algun avance? La curiosidad me come :D
Wow!, va fluido fluido!!
Tampoco es quepa nada pero me ha gustado ver 3D en la GP XD. Tengo que mirar los otros engines que corren por la page.
Tema pruebas de rendimiento has visto el límite de... no se, cubos, que puedes pntar en pantalla sin caer de fps a saco (digamos menos de 15fps)?
A ver si me animo, empiezo a trastear y aprendo a programar para la negra ^^
EDIT: Primer mensaje despues de leer el foro 2 meses :P :brindis:
Como se suele decir... Bienvenido a esta nuestra comunidad, Theck xDDD
Ke tal, champion? Anda ke no decirme ke tu tb te habias comprado una GP2X... :P Si kieres te echo una manita con lo del desarrollo gepedosekisero, ke yo ya he hecho mis cosillas.
Si cube ta pillao se puede simplificar la forma, digamos a la pirámide, no? Piramyd, gPiramid, Pezramid..
[chuck2] TOMOCHAN!!!![chuck2]
Que paixa!!? De momento toy aun con mi web que no está acabada, luego empezaremos con la GP, ya te rallaré ya XD.
Weno, dejemos el OT.
Se sabe algo nuevo de la libreria?
Powered by vBulletin® Version 4.2.5 Copyright © 2025 vBulletin Solutions Inc. All rights reserved.