Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Menu

Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menu

Mensajes - Manu343726

#181
Proyecto dx_lib32 / Re: POR FIN!!! Motor3D con dxlib32
14 de Septiembre de 2011, 01:06:50 PM
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)
#182
Proyecto dx_lib32 / POR FIN!!! Motor3D con dxlib32
13 de Septiembre de 2011, 11:49:18 PM
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.

#183
Proyecto dx_lib32 / Re: Mi gozo en un pozo
13 de Septiembre de 2011, 11:40:57 PM
Gracias por vuestras respuestas.

Gracias por tu solución EX3, funcionó perfectamente. De hecho, ya lo he portado a dxlib32.
Sobre lo de usar vb2008, es una manía, normalmente desarrollo para .NET 3.5, por problemas de compatibilidad. Aunque ya se que vb2010 permite elegir el framework usado, he cogido la costumbre de hacer 3.5 con vb2008 y 4.0 con vb2010. Una tontería, lo se.
#184
Proyecto dx_lib32 / Re: Mi gozo en un pozo
13 de Septiembre de 2011, 01:58:55 AM
Hola

Seguí las instrucciones, pero el IDE no me deja cambiar la CPU de destino. He activado las opciones de compilacion avanzadas y en la lista de plataformas solo sale any CPU. Alguna idea? PD: Uso vb2008 express
#185
Proyecto dx_lib32 / Re: Mi gozo en un pozo
10 de Septiembre de 2011, 03:30:06 AM
Cita de: Hechelion en 10 de Septiembre de 2011, 12:31:37 AM
Adivino, Adivino....

Jajaja!!! has dado en el clavo... probaré con el link. Gracias a los dos.
#186
Proyecto dx_lib32 / Re: Mi gozo en un pozo
09 de Septiembre de 2011, 02:03:15 PM
Cita de: [EX3] en 07 de Septiembre de 2011, 06:57:12 PM
Pensaba que lo habias solucionado ???

Ya... esq seré muy torpe. CocoMestah lo arreglaba especificando que compilara para x86. Pero a mi solo me sale como opción any CPU.
No lo entiendo, porque si no leí mal el también usaba vb2008 express...

Hay algo que cambiar en la configuración del vs para que me permita más opciones de compilación???

#187
Proyecto dx_lib32 / Re: Mi gozo en un pozo
07 de Septiembre de 2011, 04:01:59 PM
Waaaaaaahhh!!!!!!!

xq el mundo es tan cruel???

Por qué tengo que ver el mensaje de CocoMestah "Windows 7 x64 y dxlib32 funciona ok" justo cuando subo el post?????

Bueno, tras ésta metedura de pata, sigo agradeciendo respuestas.
#188
Proyecto dx_lib32 / Mi gozo en un pozo
07 de Septiembre de 2011, 03:57:50 PM
Buenas, hace mucho que no paso por aquí.

Tenía ya ganas de enseñaros el motorcillo 3d que estoy haciendo, para el cual ya tengo hecho un pequeño wrapper de dxlib32  ( si,si, wrapper de wrapper, para simplificar un poco más las cosas).
Hace poco he decidido acer una inversión y arreglar mi sobremesa, al cual he instalado Win7 x64. Y cual es mi sorpresa  cuando tras instalar todo lo instalable , el compilador de vb2008 tiene un problema con el interprete COM.

Y claro, rápidamente caigo: dx_lib32. 32... mmmm. Y ahora es cuando la pregunta estúpida de la semana: ¿ No hay algún tipo de soporte/apaño para ejecutar dxlib32 en sistemas de 64 bits?

Creo que ya se la respuesta...al menos tengo el netbook (win7 starter 32 bits)...
#189
Proyecto dx_lib32 / Poligonos...
15 de Junio de 2011, 12:48:03 AM
HOLA!!!

Hace mucho que no paso por aquí para dar el coñazo (Seamos sinceros, mis preguntas no las entiendo ni yo).

He estado desarrollando un engine desde cero (creo que lo comente hace tiempo), y para no complicarme usé GDI+ para el dibujo. Ahora que lo he ido optimizando, me he dado cuenta de que es éste dibujo el mayor cuello de botella. Por eso empiezo a plantearme portarlo a dxlib32. Lo he intentado varias veces, pero hay cosas que se me resisten. En concreto dibujar polígonos.

No encuentro una manera eficaz (Vale, no encuentro ninguna manera)  para dibujar un polígono cualquiera. Ya lo se, las funciones DRAW_VertexMap,DRAW_Trapezoid, y derivados están diseñadas para dibujar tiles. Pero yo sigo empeñado. Intenté usar DirectX nativo pero es un caos. Así que me rindo a vuestras sugerencias.


Ahora, a riesgo de que alguien me apalee, reabro un viejo debate: El problema de saber si un punto está dentro de un polígono.
He estado ojeando viejos post y he visto que los más citados son el algoritmo radial y el basado en el teorema de la cuerda de Jordan.

A nivel teórico, creo que todos estamos de actuerdo en que el de Jordan es mejor (Admite polígonos concavos y convexos, y es rápido comparado con el cálculo de angulos del radial). Pero a nivel práctico, que me recomendais??? Los numerosos casos que producen fallos en Jordan me dan mala espina...pero los ángulos del radial...Ya véis, todo un debate en mi mente. AYUDADME ANTES DE QUE ME VUELVA LOCO!!!
Gracias de antemano.

PD: Si por curiosidad aparece Giant's Quid, me gustaría hacerle un par de preguntas sobre su engine.
#190
Programación gráfica / Proyección cónica
11 de Mayo de 2011, 01:52:09 AM
Hola.

Estoy desarrollando un engine desde cero y tengo algunos problemas con la proyección cónica.

Suponiendo que tengo un punto P(Px,Py,Pz), y una cámara con posición C(Cx,Cy,Cz) y vector de dirección V(Vx,Vy,Vz).

El primer paso sería calcular el plano de proyección.Facil: Plano con vector normal la dirección de la cámara,y que está a una distancia determinada de ésta (Se supone,entre los objetos de la escena y la cámara).
Bien ahora trazamos una recta desde la cámara hasta el punto P,y calculamos la intersección entre dicha recta y el plano de proyección.
Ha dicho punto lo llamaremos I(Ix,Iy,Iz). Si el plano de proyección fuera paralelo al plano XOY(es decir,el plano formado por los ejes X e Y) bastaría descartar la coordenada z del punto I para obtener las coordenadas 2D de P.

Pero si el plano no es paralelo, ¿como saco las coordenadas 2D?
He pensado en girar el plano despues de calcular I hasta colocarlo paralelo.Después saco las coordenadas 2D del punto I girado, mediante el método anterior. Pero realizar un giro cada vez que necesito proyectar un punto me parece muy costoso. ¿Hay alguna manera mejor?

Gracias de antemano.


Ah por curiosidad. Alguien sabe que tipo de matriz usa OpenGL para representar los puntos en los cálculos de transformaciones? Yo los represento en forma de matriz columna  X  ,pero he visto que suele hacerse como matriz fila (X,Y,Z,1).
                                                                          Y
                                                                          Z
                                                                          1
#191
Programación gráfica / Dudas varias...
04 de Abril de 2011, 11:17:17 PM
Hola. Soy nuevo en éste subforo.

Estoy desarrollando un motor3D y tengo varias dudas al respecto:

Programo con VB.NET, y utilizo las funciones de dibujo de dicha plataforma. Estoy pensando en migrarlo a DirectX, pero tengo varias dudas:

Necesito saber las cosas de las que se encarga automáticamente. Es decir, proyecciones , transformaciones , iluminación, etc. Cuales hace y cuales no???


#192
Proyecto dx_lib32 / La consola...un amor no correspondido
31 de Marzo de 2011, 04:55:47 PM
Creo que ya lo he dicho alguna vez, utilizo masivamente la consola de depuracion de dxlib32. Tanto es así que hay proyectos que agrego referencias a la librería solo para usar la consola (Absurdo no???).
Bueno la cosa es que tengo varias dudas sobre su funcionamiento:

- En primer lugar, me he fijado que no se pueden usar varias. Por mucho que cree varios objetos system, las llamadas a DEBUG_SendText se dirigen a la misma. Hay alguna manera de crear varias consolas independientes?

- Cuando cierras la consola con el boton X de la ventana, la aplicación finaliza. ¿Se puede evitar ésto?

- Ésto es solo por curiosidad: El código que usa la entrada de datos a la consola es ASCII normal no? Nada de extendido ni Unicode...
Lo digo por que me he fijado en que no reconoce las tildes ni la ñ.
#193
Bueno es una pena... pero gracias por la ayuda. La verdad es que ya implementé mi propio buffer de dibujo así que no hay problema.

Bueno ya me he decidido definitivamente a pasar al poryecto a dxlib32. Mi motor redibuja mediante la llamada a una funcion publica, la cual devuelve la imagen resultante. Con lo cual sería relativamente facil hacer ésto en el bucle de dxlib32. Solo tendría que crear una textura a partir de dicha imagen y redibujarla... Pero es ésto eficiente?? Es decir, aguanta la librería que estés creando una textura desde la memoria una y otra vez???
#194
He estado mirando post antiguos  me he dado cuenta de que la librería de directx8 tambien es necesaria,pero creo que no la subí junto con los otros dos archivos..... es obligatorio tenerla?
se que es la base de dxlib32 pero, si el sistema que lo ejecute tiene librerias de directx de una version posterior, es necesaria o puede usar la version posterior?? Digo esto sin tener n idea de los cambios de la api en los ultimos años. Teoricamente el avance de ésta deberia ser acumulativo ( por el tema de la compatibilidad) pero claro...igual quitan cosas y ponen otras....


Bueno dejemonos de rollos y vayamos al tema:

Creo que ya describí antes el método que uso para hacer el sombreado: Recorro todos los vértices del poliedro, y por cada uno creo una recta que une al vertice con el foco de luz. De éste modo el vertice de la sombra es la interseccion entre la recta vertice-foco y el plano del suelo.

Así tras recorrer todos los vertices de la figura obtengo una nube de puntos que obviamente no puedo usar directamente para pintar.
Por ello utilizo un algoritmo para obtener la envolvente de dicha nube de puntos,ésto es, el polígono convexo con menor área que contiene a todos los puntos. Y aquí está el problema. Utilizo el algoritmo de Graham (http://es.wikipedia.org/wiki/M%C3%A9todo_de_Graham) para calcularlo. Con poliedros pequeños todo va bien, pero cuando el poliedro tiene muchos vertices, los puntos de la sombra salen muy proximos entre si, y el algoritmo falla.
Alguna idea??

Otra cosa: El método que expliqué antes solo calcula las sombras proyectadas sobre el suelo, y quiero implementar tambien sombreado sobre las figuras. Alguien sabe de algun método que no sea hacer lo anterior con cada cara existente (Es decir, en vez de hacer la interseccion con el suelo, hacerla con el plano de cada cara)???


Ahora si, sobre dxlib32.  Si lo he entendido bien , el parametro z sirve para especificar la posicion en el buffer de dibujo...
He ojeado la documentacion y me parece haber visto que solo hacepta valores entre -8 y 8. Si es así, como hago para especificar la posición  de digamos 1000  texturas?
#195
Proyecto dx_lib32 / Re: Motor3D con dxlib32
30 de Marzo de 2011, 05:55:45 PM

Hola...
He conseguido subir los archivos a una carpeta publica que he hecho en mi cuenta de SkyDrive
Ésta es la direccion: http://cid-00a443c2ce725615.office.live.com/self.aspx/.Public

Si os gusta colgaré el codigo tambien.... y haber si consigo traspasarlo de una vez a dxlib32!!!!!!!!!
Me ha´riais un favor si me explicais como insertar capturas de pantalla en los mensajes. Gracias





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.