PDA

Ver la versión completa : Biblioteca 3D



pezezin
13/02/2006, 23:08
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.

kjulagp
13/02/2006, 23:15
Muy buena idea!

efegea
13/02/2006, 23:19
¡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 :(

MurDoK
14/02/2006, 00:36
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

pezezin
14/02/2006, 02:27
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.

Wave
14/02/2006, 02:53
Tiene muy buena pinta esto, si necesitas ayuda para pasar todo a asm de arm a lo mejor puedo ayudarte.

kmkzk
14/02/2006, 03:38
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!

miq01
14/02/2006, 05:50
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.

pezezin
14/02/2006, 06:10
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...

Wave
14/02/2006, 14:09
En cuanto termine los examenes (mañana es el ultimo), me pondre a mirarlo.

pezezin
14/02/2006, 19:34
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.

AOJ
14/02/2006, 21:04
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 ... :(

Wave
15/02/2006, 00:04
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.

pezezin
15/02/2006, 05:01
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.

AOJ
15/02/2006, 05:15
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]

BuD
15/02/2006, 05:22
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?

efegea
15/02/2006, 05:30
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

bleim
15/02/2006, 05:32
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.

ArTo
15/02/2006, 20:37
Genial tío, tiene muy buena pinta :brindis:

Saludos...

saruman
15/02/2006, 21:32
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.

pezezin
15/02/2006, 22:19
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:

Zenzuke
15/02/2006, 22:52
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

BuD
15/02/2006, 23:42
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

AOJ
15/02/2006, 23:53
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...

efegea
16/02/2006, 00:17
pezcaito frito [wei5]

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.

efegea
16/02/2006, 00:55
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

Zenzuke
16/02/2006, 01:09
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

pezezin
16/02/2006, 01:31
Ponerle mi nick a la biblioteca quedaría muy egocéntrico. Sería como ponerle mi nombre a un sistema operativo... :P

AOJ
16/02/2006, 01:47
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***

efegea
16/02/2006, 02:30
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:

kjulagp
17/02/2006, 14:34
Y que tal OPENgp como nombre [wei6]

pezezin
18/02/2006, 07:36
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.

Wave
19/02/2006, 00:14
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!

Zenzuke
20/02/2006, 08:27
Oye, pues pensandolo bien... cube tb es un nombre cojonudo para el engine, y ya es como lo ponen en las noticias :D

pezezin
20/02/2006, 19:21
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...

t4d3o
26/02/2006, 19:22
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...

Zenzuke
08/03/2006, 20:37
Cierto, no me acordaba del cube engine, y mira que lo habia probado xDDDD

Por cierto, pezezin, algun avance? La curiosidad me come :D

Theck
08/03/2006, 21:29
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:

tomo
27/03/2006, 19:28
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.

DeJade
27/03/2006, 22:40
Si cube ta pillao se puede simplificar la forma, digamos a la pirámide, no? Piramyd, gPiramid, Pezramid..

Theck
28/03/2006, 00:31
[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?