Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





POR FIN!!! Motor3D con dxlib32

Iniciado por Manu343726, 13 de Septiembre de 2011, 11:49:18 PM

« anterior - próximo »

Manu343726

Siiiii lo conseguí.... aunque con algunos fallos que con vuestra ayuda podré remendar.
Aquí está la dirección de descarga, para quien lo quiera probar: http://www.mediafire.com/?9vfd364bbg65b4e

Quien lo pruebe se dará cuenta rápido del primer problema: Cuando se redibuja muy rapidamente, la escena no se dibuja. No se si es que con las oeraciones de transformación/iluminación aplicadas constantemente bloqueo el bucle de renderizado de dxlib32. Por si acaso, lo metí en un subproceso diferente. Como veis, sin resultado. Alguna idea?

Por cierto, para aquellos que quieran dibujar polígonos con dxlib32 (que serán pocos), basta con triangularlos y dibujar cada triangulo como un quad de dxlib32 (DRAW_Trapezoid). Solo hay que repetir uno de los vertices.

Hechelion, ya puedes ver girar un cubo a 30 FPS con dxlib32 XD.


Hechelion

Ya lo descargue y estuve tratando de probar.

Primero, felicitarte por lo que has hecho, se nota un currazo.

Sobre el programa.
Al correr el motor, veo todo en negro, tengo que agregar un foco para poder ver algo, que es una gran esfera y que según entiendo, vendría a ser la figura 0.
Intenté agregar un poliedro (un cubo) con las propiedades por defecto, y por lo que entiendo, se agrega, pero solo veo su forma en negro y si intento hacer cualquier movimiento, este desaparece.
Diría que te falta una lista que enumere los poliedros en escena, si no, se hace difícil saber uqe hay, en especial si al correr el programa no hay ningún tipo de información.
Aunque el indicador del programa me dice que hay más de 30 FPS, la imagen de la figura parpadea, como si le tomara mucho tiempo re dibujarse, en especial cuando intento cualquier movimiento con las teclas (a,s,w,d,z,x).

¿Podrías explicar un poco como funciona o que es cada cosa.?

Así que sigo sin poder ver un cubo girando a 30 FPS  :..
y no es por ser exigente, pero tengo la idea que lo había pedido (el cubo girando)  con texturas  >:D

Nuevamente felicitaciones por el trabajo, pero a ver si le puedes agregar algunas explicaciones de como funciona.

Manu343726

#2
Muchas gracias por el interes.... y si ha sido unn currazo, 7000 lineas y subiendo.

Bueno, en primer lugar lo de los indices. Lo se es un lio que no indique los indices en la escena, tienes que acordarte tu de cual es cual.
Aun así tienes la pestaña datos en el menú archivo, donde te sale una ventana con informacion sobre tiempos del pipeline, información del buffer (no lo mires está obsoleto y no va), poliedros ,etc.

Lo de que al principio no veas nada culpa mia, la configuración de inicio de la escena pone un foco blanco en (1000,0,0) y la esfera de ancho 100 con el centro en (0,0,0). Aunque no tengas el problema del parpadeo con dxlib32, no se ve nada. Hay que mover el foco.

Bueno hare una pequeña descripción del funcionamiento del pipeline para ver si encontramos el fallo:

En primer lugar consta de dos partes: El pipeline propiamente dicho y el wrapper de dxlib32.
El segundo contiene una lista de los objectos a dibujar en la escena, entiendase por objetos triángulos y polígonos,  no poliedros. Es ésta lista la que se dibuja en el bucle render de dxlib32.

El pipeline contiene la lista de poliedros y focos de la escena. A su vez contiene un buffer de caras ( ya esxplicaré ésto más adelante). Cuando se hace alguna modificación física (se moifican poliedros, no focos) se realizan éstos pasos:
Calculo de transformaciones -> Culling -> Carga en buffer -> reordenamiento de buffer -> Shading/Actualización de escena.

Es decir, el buffer guarda los índices de las caras que han pasado el culling, y que por tanto estarán en la escena. Luego (como un ZBuffering es muy costoso) ordeno el buffer según la distancia de las  caras a la cámara (Algoritmo del pintor). Y luego la actualización de la escena: Calculo de shading y actualización de la escena del wrapper.

Bien y creo que es en éste último paso donde puede estar el fallo. Primero envio un método al wrapper que le indica que va ha modificarse la escena. Ésto le permite prepararse guardando la escena anterior en cache, para que mientras modificamos se siga viendo la anterior (Teoricamente ésto solucionaba el parpadeo...). Tras modificar la escena, otro mensaje diciendo que hemos acabado. Y actualiza la lista de objetos de la escena de dxlib32. Creo que el problema está en que al hacer cambios continuamente (Por ejemplo la esfera gira sin parar), no le da tiempo al bucle de dxlib32 a volver a redibujar la escena. Por si fuera ésto, metí dicho bucle en otro thread, pero ya ves...

Ah por cierto lo del cubo negro también es culpa mía: Al generar un nuevo poliedro, el color de éste es negro. Selecciónalo y cámbialo.
Las texturas.... creo que va para largo. Ya sabes, dxlib32 y los triangulos no se llevan muy bien (Ahora vendrá [EX3] a decirme que no estaba hecha para ésto XD)

Manu343726

#3
Por cierto he colgado el código completo, por si fisgando encontrais algun error. Aviso: Todavía no lo he pasado todo a limpio y soy muy guarro escribiendo.

Si lo ve [EX3], verá que le he hecho un pequeño homenaje (Algunos lo llamarán plagio...), he usado el formato de prefijos que tiene dxlib32. Me parecio muy cómodo a la hora de escribir.

Agradezco críticas.

http://www.mediafire.com/file/wvmi9eq7wlhdctp/motor3d.rar

[EX3]

Cita de: VBManu en 14 de Septiembre de 2011, 01:06:50 PM
Ahora vendrá [EX3] a decirme que no estaba hecha para ésto XD
Y lo sigo diciendo, tecnicamente no esta diseñada para ello, otra cosa es que alguno os aburrais mas que una ostra xD

Buen trabajo, VBManu, de hecho ya estuve en la ultima kdd stratera hablando de la "fiebre 3D" que os dado a un par con mi libreria ;) y hace nada acabo de publicar una entrada en la pagina de facebook del proyecto con enlace a este post (aunque de momento solo siguen la pagina 4 gatos :P) al igual que en mi cuenta de Twitter y Google+ (suelo ir haciendo algo de ruido de la libreria por ahi con proyectos que la usan).

A ver si mas adelante ando algo mas sobrado de tiempo y me instalo Visual Basic .NET para echarle un vistazo a tu creacion (ahora por razones de trabajo solo tengo instalado C#).

Una sugerencia a modo de consejo, al igual que hace Hechelion con sus creaciones, subir capturas y/o videos de vuestras creaciones, que siempre entra mejor por la vista que una descripcion y un enlace de descarga ;)

Salu2...
José Miguel Sánchez Fernández
.NET Developer | Game Programmer | Unity Developer

Blog | Game Portfolio | LinkedIn | Twitter | Itch.io | Gamejolt

[EX3]

Cita de: VBManu en 14 de Septiembre de 2011, 03:18:08 PM
Si lo ve [EX3], verá que le he hecho un pequeño homenaje (Algunos lo llamarán plagio...), he usado el formato de prefijos que tiene dxlib32. Me parecio muy cómodo a la hora de escribir.
No he llegado a mirar el codigo, pero si trabajas en .NET, por que no has orientado el codigo a objetos? La razon de por que dx_lib32 muestra las funciones agrupadas en prefijos fue por que cuando inicie el desarrollo de esta libreria hace ya 10 años ya la plantee como una API, pero vamos, orientandola a objetos (que es lo que he tratado de hacer estos años con el TLSA.Engine) seguramente habrias logrado una organizacion mas limpia del codigo y sobre todo a la hora de programar con el (y esto que conste lo digo sin poder ver como esta todavia montado el motor ;))

Salu2...
José Miguel Sánchez Fernández
.NET Developer | Game Programmer | Unity Developer

Blog | Game Portfolio | LinkedIn | Twitter | Itch.io | Gamejolt

Manu343726

Gracias!!

Probaré lo de los vídeos. Ahora que lo pienso, creo que hice alguna captura hace un tiempo (En GDI+ claro. Cachis, seguro que si no digo nada no notáis la diferencia...)

El motor si que está orientado a objetos, el problema es que las funciones de cálculo matemático las escribí en un módulo público para que la dll las expusiera por si quería usarlas para otra cosa. Por ejemplo, el juego que estoy haciendo (si, con dx_lib32) las usa.

Tengo una duda, no hace falta que el bucle de renderizado de dx_lib32 esté en un thread aparte no?
Ya no sé como solucionar el parpadeo. Me fastidia muchísimo, porque con GDI+ funcionaba perfectamente, y llevarme éste fiasco con el tiempo que llevo queriendo portarlo a dx_lib32...

Por cierto, he estado buscando por el foro y no encuentro ningún enlace al código de dx_lib32. Según tengo entendido, cuando diste por terminado el proyecto, publicaste el código. ( O igual es que pretendías hacerlo y yo ya me hecho ilusiones).

Manu343726

Estaba mirando lo de los videos....conoceis algun sofware gratuito de captura de pantalla en el que el video tenga una calidad decente??

[EX3]

Cita de: VBManu en 14 de Septiembre de 2011, 06:12:37 PM
El motor si que está orientado a objetos, el problema es que las funciones de cálculo matemático las escribí en un módulo público para que la dll las expusiera por si quería usarlas para otra cosa. Por ejemplo, el juego que estoy haciendo (si, con dx_lib32) las usa.
Ahm... vale, ya entiendo :)

Cita de: VBManu en 14 de Septiembre de 2011, 06:12:37 PM
Tengo una duda, no hace falta que el bucle de renderizado de dx_lib32 esté en un thread aparte no?
Siendo el core de dx_lib32 Visual Basic 6.0 y la interfaz COM/ActiveX de DirectX8 yo no te recomendaria aislar el render en un hilo aparte por si las moscas ;)

Cita de: VBManu en 14 de Septiembre de 2011, 06:12:37 PM
Ya no sé como solucionar el parpadeo. Me fastidia muchísimo, porque con GDI+ funcionaba perfectamente, y llevarme éste fiasco con el tiempo que llevo queriendo portarlo a dx_lib32...
No he mirado el codigo pero lo unico que se me ocurre para que parpadee es que no se este dibujando en cada ciclo/frame de renderizado o bien que al estar recalculando el objeto tengas algun vertice mal parametrizado y el quad no sea correctamente proyectado. Si no de primeras no entenderia por que se dibuja a ratos ???

Cita de: VBManu en 14 de Septiembre de 2011, 06:12:37 PM
Por cierto, he estado buscando por el foro y no encuentro ningún enlace al código de dx_lib32. Según tengo entendido, cuando diste por terminado el proyecto, publicaste el código. ( O igual es que pretendías hacerlo y yo ya me hecho ilusiones).
Esta en proyecto el liberar el codigo de la version 2.2.1 en la que estuve trabajando en 2009/2010, cuando tenga tiempo (ultimamente nulo xD) y pueda llevar a cabo cierto "invento" que tengo en mente para la ocasion ;) liberare el codigo sin problema, de hecho me interesa hacerlo si no quiero que se muera mas "aun" de asco la libreria. De momento me temo que toca esperar :)

Salu2...
José Miguel Sánchez Fernández
.NET Developer | Game Programmer | Unity Developer

Blog | Game Portfolio | LinkedIn | Twitter | Itch.io | Gamejolt

Manu343726

Ya he colgado un video. Es algo de hace tiempo, pero vale para hacerse una idea:
http://www.youtube.com/watch?v=oc3rstFWSzc

Joder, no me había dado cuenta de lo cantoso que queda el narangita...

Conocéis algún repositorio de imágenes gratuito??? Lo quiero para colgar aquí alguna captura de pantalla.

Ah, muchas gracias a [EX3] por la mención en el muro de Facebook, he de admitir que casi me salta la lagrimilla....

[EX3]

Cita de: VBManu en 14 de Septiembre de 2011, 08:30:30 PM
Conocéis algún repositorio de imágenes gratuito??? Lo quiero para colgar aquí alguna captura de pantalla.
Imageshack.us, Picassa, Flickr, etc, etc... sera por servicios :P (y aqui se mencionan varios para subir archivos facilmente al foro y de maneras mas directas que con Mediafire o Megaupload ;) )

Cita de: VBManu en 14 de Septiembre de 2011, 08:30:30 PM
Ah, muchas gracias a [EX3] por la mención en el muro de Facebook, he de admitir que casi me salta la lagrimilla....
Egoistamente hablando, gracias a vosotros, que me dais material para hacer ruido con la libreria por ahi xD

Salu2...
José Miguel Sánchez Fernández
.NET Developer | Game Programmer | Unity Developer

Blog | Game Portfolio | LinkedIn | Twitter | Itch.io | Gamejolt

[EX3]

Acabo de terminar de ver el video, muy bueno el resultado que he visto, cuando eso pueda mover texturas ya sera la bomba. Buen trabajo :)

Salu2...
José Miguel Sánchez Fernández
.NET Developer | Game Programmer | Unity Developer

Blog | Game Portfolio | LinkedIn | Twitter | Itch.io | Gamejolt

Hechelion

Cita de: [EX3] en 14 de Septiembre de 2011, 07:04:26 PM
Cita de: VBManu en 14 de Septiembre de 2011, 06:12:37 PM
Por cierto, he estado buscando por el foro y no encuentro ningún enlace al código de dx_lib32. Según tengo entendido, cuando diste por terminado el proyecto, publicaste el código. ( O igual es que pretendías hacerlo y yo ya me hecho ilusiones).
Esta en proyecto el liberar el codigo de la version 2.2.1 en la que estuve trabajando en 2009/2010, cuando tenga tiempo (ultimamente nulo xD) y pueda llevar a cabo cierto "invento" que tengo en mente para la ocasion ;) liberare el codigo sin problema, de hecho me interesa hacerlo si no quiero que se muera mas "aun" de asco la libreria. De momento me temo que toca esperar :)

Salu2...

Como va la mano, me parece que veré primero el cubo girando a 30 FPS (y si, era con textura) que ver el código fuente de la librería  >:D

[EX3]

Cita de: Hechelion en 14 de Septiembre de 2011, 10:29:29 PM
Como va la mano, me parece que veré primero el cubo girando a 30 FPS (y si, era con textura) que ver el código fuente de la librería  >:D
Mas que probable xD

Salu2...
José Miguel Sánchez Fernández
.NET Developer | Game Programmer | Unity Developer

Blog | Game Portfolio | LinkedIn | Twitter | Itch.io | Gamejolt






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.