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)
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)