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

#196
Proyecto dx_lib32 / Re: Motor3D con dxlib32
30 de Marzo de 2011, 11:53:48 AM
Siento ser tan criptico pero las dudas me salen a saltos....

La ayuda de dxlib32 la hciste con algun tipo de editor de HTML? si es así podrías decirme cual?
Estoy pensando hacer algo parecido, para apuntarlo todo y así no perder mis ideas en el futuro....
Se que apuntarlo todo en un cuaderno acaba mal....por eso prefiero un soporte informático. Y con lo comodo que es html a la hora de enlazar unos temas con otros mediante enlaces e indices....en fin.
#197
Proyecto dx_lib32 / Re: calculos para simulacion 3D
30 de Marzo de 2011, 11:47:38 AM
Estoy de acuerdo con EX3, lo mejor que puedes hacer es diseñar la estructura del mapa en 2D y  luego mediante logica decirle que partes están encima de otras. Recuerdo que DukeNukem3D hacia precisamente ésto:Losmapas eran 2D, solo que  tenian diferentes capas.Luego el levantaba las texturas de las paredes para que pareciera 3D. (Alguno me saltara al cuello diciendome que dukenukem3D no era 3D, sino un 2D camuflado....2.5D creo que lo llamaban). Pero juegalo y veras que es justo el tipo de implementacion que necesitas.

Ademas ahora que lo pienso hace años que la empresa (3D realms , quebró no ?)  publico el codigo completo del juego, así que prodrías hecharle un vistazo. (esta en c por cierto).
#198
Proyecto dx_lib32 / Re: Motor3D con dxlib32
30 de Marzo de 2011, 11:39:21 AM
Muchas gracias.
Cita de: [EX3] en 30 de Marzo de 2011, 02:38:11 AM
Encadenando o combinando varias llamadas a esa funcion podrias crear poligonos complejos, tu hexagono serian dos llamadas por ejemplo, ya que la figura minima a formar siempre es un trapezoide, figura de 4 lados y 4 vertices:

mmmmmm....creo que así vamos por buen camino.
Todo esto empezo hace mas de un mes,cuando mi padre me dio un libro sobre graficos 3d por ordenador y me reto a hacer algo precido. Resulta que hace unos años(bastantes años) a mi padre le pagaron una pasta por desarrollar un editor 3D (tipo autocad,pero no tanto) y se ayudo de ese libro (Resultó que el librito era del año 85 , y los ejemplos estan en fortran....en fin) Al final el libro solo me sirvio para entender las matrices de transformacion y poco mas, ya que estamos hablando de una epoca en la cual la maxima funcion de dibujo era pintar un rectangulo....Pero por algo se empieza.

Digo esto porque precisamente mi padre me dijo hace poco que las caras poligonales están muy  bien para empezar,pero que para que el motor se pudiera adaptar a los sistema actuales (DirectX por ejemplo) debería usar triángulos....muchos triangulos.

Lo que hace que lo que me propones me venga como anillo al dedo.Mato dos pajaros de un tiro. Pero hay otro probrlema: Como hago triangulos con dxlib32? basta con pasarle 4 vertex y que uno de ellos esté repetido????

Solo por curiosidad (y creo que por algo que se hacerca a la pesadez) podrías explicarme como funciona DRAW_VertexMap ( con como funciona me refiero a su código , como lo hace vamos,digo esto porque creo que no me explique bien).

Muchas gracias


PD: Podrias describirme como colgar archivos en los mensajes??? He intentado colgar los dos archivos del proyecto (el ejecutable y la interop de dxlib32) pero no funciona....

#199
Proyecto dx_lib32 / Re: Motor3D con dxlib32
30 de Marzo de 2011, 12:47:44 AM
Entre las funciones de dxlib32 no he visto ninguna que permita pintar un poligono cualquiera ( por ejemplo,pintar un hexagono verde). Por eso quería saber como funcionaba Trapezoid, para ver si yo podía hacer algo parecido. Y si me decís como trabaja la funcion equivalente que lo hace con texturas (no recuerdo el nombre,DRAW_VertexTexture puede ser?) tambien os lo agradecería,ya que mi objetivo final es poder aplicar texturas a los poliedros,y para eso tengo que saber como deformar una imagen para que se adapte a un poligono.

¿Quieres que te pase el codigo por correo?
#200
Proyecto dx_lib32 / Re: Motor3D con dxlib32
30 de Marzo de 2011, 12:36:00 AM
Lo siento,no me di cuenta que deje el tema a medias:

El dibujo lo hago con GDI+, pero mi objetivo sería usar dxlib32. Como solo uso Draw/FillPolygon supongo que será facil...
DDe ahí la pregunta sobre DRAW_Trapezoid que hice a EX3 en el tema de XNA. ((Vais a pensar que estoy obsesionado con esta funcion,siempre hago preguntas sobre ella...)
Respecto a la iluminación,lo que hago es calcular el color teniendo en cuenta la orientacion de la cara respecto al foco de luz,así tomas como base el color real de la cara y el de iluminacion será mas oscuro cuanto mayor sea el angulo formado por la normal de la cara y la direccion del foco (en realidad el foco es un punto, así que creo el vector formado por el foco y el baricentro de la cara).

Si me dices como, te cuelgo el código (está formado por aproximadamente 10 módulos,hazte una idea).
Tengo entendido que tu tambien usas VB.NET, así que perfecto. ( En concreto uso 3.5).
#201
Ya hice el tema, así que si  no es molestia podrías contestarme en él? Es urgente... (Suena un poco borde no?, que conste que no es mi intencion)

Muchas gracias.
#202
Proyecto dx_lib32 / Motor3D con dxlib32
29 de Marzo de 2011, 11:46:00 PM
Hola.
En el tema de la noticia de XNA  nombré el desarrollo que estoy haciendo:Un motor3D que en el futuro estará basado en dxlib32
He creado este tema para enseñar que sí se puede obtener un rendimiento bastante haceptable con vb.

Si puedo cuelgo una demo con lo que llevo hasta ahora (aproximadamente un mes), pero antes de eso haré una brebe descripción:

El proyecto esta formado por varios modulos (TiposEspacio3D,TiposEspacio2D,CalculoEspacio3D,CalculoEspacio2D,etc) cada uno con el codigo de cada tipo de elemento,como indican sus nombres. En resumen cuento con:

- Un módulo con un conjunto de funciones para el calculo con matrices (Producto matricial, determinante,matriz inversa,etc)
- Otro con el calculo de transformaciones mediante matrices(Rotación, traslación,escalado...)
- Clases para los elementos del espacio tridimensional (Plano3D,Recta3D,Vector3D,Punto3D...)
- Clases del espacio bidimensional (Vector2D, y Point obviamente)
- Modulo de calculo de intersecciones , distancias ... (Distancia punto-punto,interseccion Plano3D-Recta3D,etc)
- Modulo de calculo 2D(Punto dentro de poligono,envolvente de nube de puntos,etc)
- Modulo de cálculo de representaciones(Punto3D a point en diferentes perspectivas)
- Calculo de sombreado-iluminacion
- Clases de objetos (Vertice,Cara,Poliedro...)

El motor está formado por dos capas: Por una parte está la clase Motor3D, que contiene una matriz con los poliedros en memoria y otra con los focos de luz. Ésta a su vez incluye una clase que implementa un buffer de dibujo, el cual conitiene las llamadas a los métodos de dibujo/sombreado. Lo más importante de ésta es que contiene una matriz con la informacion de todas las caras (ésto es el buffer propiamente dicho), el cual se reordena automáticamente según la distancia a la de cada cara a la cámara, lo que permite ocultar las caras tapadas por otras.

Para mejorar el rendimiento, no dibujo todas las caras del buffer, sino que compruebo si éstas "miran" hacia el lado de la camara. Así todas aquellas que miran " hacia atrás" no son dibujadas.

Bueno... si le interesa a alguien daré algunas explicaciones más detalladas. Pero si que me vendría bien la opinión de algunos otros desarrolladores, para comparar los métodos de trabajo.


En concreto la demo que voy a colgar contendrá cuatro poliedros en rotación alrededor del eje z, con un foco de luz,el cual podréis mover con el cursor del ratón.
Si queréis podéis  parar la rotación (tecla P), y trasladar la figura seleccionada(flechas, y teclas C y V para eje Z) y rotarla (Eje Z: tecla Z y X,Eje X teclas W y S, eje Y teclas A y D)

He conseguido con éstas figuras un rendimiento de más de 100 FPS, pero normalmente ronda los 30.  Utilizo un Asus EeePC, así que supongo que a la mayoría os vaya mejor.

PD: Npo consigo colgarlo, ayuda por favor!!!
#203
Que buena noticia. LLevo tiempo intentando probar XNA pero se ve que C# y yo no nos llevamos bien.
Pero creo que cada cosa está para algo. XNA está muy bien ,pero para la gente que intentamos ( y por mi parte recalco lo de intentar) hacer juegos en vb no merece la pena meterse en más enbolaos. dxlib32 está muy bien,encapsula satisfactoriamente la mayoria de funciones que necesitamos,y como muy bien apuntais, vb no es el mejor lenguaje para hacer estas cosas...así que me quedo con dxlib32...

Ha por cierto yo tenía pensado plantear una serie de dudas por aquí: Para EX3, podrías explicarme como funciona la funcion DRAW_Trapezoid ? (A su implementacion me refiero, no al modo de usarla). Estoy desarrollando un motor 3D y para dibujar uso las funciones de GDI+.Quería portarlo a dxlib32, pero no he encontrado la forma de dibujar/pintar poligonos de cualquier numero de lados. Necesito algo tipo DrawPolygon / FillPolygon de la clase graphics. Alguna idea?

Otra pregunta: Uso masivamente la consola de depuracion implementada en dxlib32, y me he fijado que por mucho que crees varios objetos system los mensajes de DEBUG_SendText siempre se mandan a la misma consola.¿Hay alguna manera de crear varias independientes? (Mi intuición me dice que no, pero...)

gracias de antemano


Otra cosa,se que no tiene nada que ver, pero me he comprado el Microsoft Kinect para trastear un poco. Resulta que hace poco la empresa que lo desarrollo ha publicado todos sus drivers y un kit de desarrollo. La cosa es que yo no consiguo que me funcione bien. ¿Habeis probado vosotros algo?
Para que no haya problemas, si os parece bien igual abro el tema en otro subforo....
#204
Proyecto dx_lib32 / Re: Parametro "Z"
23 de Febrero de 2011, 01:02:56 PM
Ya que mencionas lo del oreden de los vertices del sprite.
Yo también me había topado con ese problema. ¿Podriais confirarme cual es el orden correcto?
Cada vez que uso DRAW_Trapezoid y los demás tengo que probar ochenta veces hasta que hacierto con el orden. Y no estoy seguro de si el orden que pongo me gira la figura.

Gracias de antemano.
#205
Proyecto dx_lib32 / Re: 3D Enviroment - Entorno3D en DX
23 de Febrero de 2011, 12:57:54 PM
Que crack, me has quitado la idea!!! Aunque yo no llego a tanto, yo me quede en 2D Isométrico.

Bueno, aunque me duela decirlo ( Porque yo también me estoy matando para hacer mi propio motor) estoy de acuerdo con Hechelion: dxlib32 no está hecho para esto... Se tarda demasiado tiempo en recalcular todas las posiciones. Yo creo que voy a seguir su consejo y pillaré algun motor. Aunque solo por curiosidad (Y admitamoslo, cabezonería) seguiré con mis investigaciones.

Mi recomendación es que si lo que realmente estás buscando es hacer un juego, olvidate de lo que estás haciendo y búscate un motor decente. Si por el contrario, eres como yo, y solo buscas un "reto mental"  te animo a que sigas para delante. Eso si, me harias un gran favor si vas colgando los progresos que hagas.

Suerte.
#206
Proyecto dx_lib32 / Re: RenderTarget demasiado pequeño....
18 de Febrero de 2011, 11:35:47 PM
Muchas gracias Hechelion.
Respecto a lo de DrawTrapezoid, no es problema. Realmente estoy haciendo pruebas con las transformaciones,por eso use drawtrapezoid,para ver como quedaban los vértices.

Igual tienes razón y debo dejar de comerme la cabeza con lo del 3D, y hacerlo en 2D directamente.
Me parece muy buena idea lo de dibujar un tilemap normal y luego rotarlo,lo mirare.
Respecto a mi duda principal, sigue sin ocurrirseme alguna solución. El problema es que a veces la textura del render target es mas pequeña que el mapa dibujado.

Se me ha ocurrido dividir el mapa en cuatro partes y dibujarlas en texturas individuales....no se.
Sobre la clase que mencionas,ya lo había visto.Me parece que está curradisimo, en serio.
Mi idea es hacer yo ismo todo el motor gráfico (Lo se, es una matada) si no no lo veo la gracia.

Muchas gracias.

#207
Proyecto dx_lib32 / RenderTarget demasiado pequeño....
17 de Febrero de 2011, 03:48:35 PM
Hola!

(Antes de nada,decir que ya he publicado éste mensaje en mi tema anterior (VB no ha muerto...) pero he decidido publicarlo mejor como un nuevo tema, por si no lo veíais. Para la proxima vez, ¿Cuales son las normas del foro al respecto?)

Mucha gracias por responder tan rápido, así da gusto.
Efectivamente trabajo con .NET (Concretamente con la versión 3.5.Empeze con 4.0,pero he decidido usar la anterior para tener mayor compatibilidad).

Haber si me podeis ayudar con algunos problemillas que tengo:
He empezado a hacer pruebas para el desarrollo del "SimCity" que comenté. La idea es que sea en perspectiva isométrica.
Lo que he hecho es crear algunas estructuras para manejar elementos en el espacio (Punto3D,Vector3D,etc),y luego mediante una transformación  dibujo dichos elementos en isométrico.
Para generar un escenario guardo en una matriz los valores tridimensionales de los vértices de la malla. Por ejemplo,en un escenario de 100x100 sería así:

Dim Malla(99,99) as Punto3D

        For i As Integer = 0 To 99
            For j As Integer = 0 To 99
                Malla(i, j).X = i * 10
                Malla(i, j).Y = j * 10 'Así la celda tiene 10 pixels de ancho y de alto
                Malla(i, j).Z = 0
            Next
        Next


Y luego para dibujarlo obtengo sus representaciones y uso el método DRAW_Trapezoid:

Dim Vertices(3) as Vertex

for i as integer=0 to 99
   for j as integer=0 to 99
      Vertices(0).X=Matriz(i,j).RepresentacionIsometrica.X
      Vertices(0).Y=Matriz(i,j).RepresentacionIsometrica.Y
      Vertices(0).Color=Color.Blue.ToArgb
      ..... Así con los cuatro vertices
   next
next
Graphics.DRAW_Trapezoid(Vertices)


Vi en la documentación el tema de los RenderTarget y me pareció perfecto: Así solo recalcula cuando hago zoom,y el movimiento de cámara lo hago dibujando la textura del RenderTarget en un lado u otro.
Establecí el tamaño de éste a 2048x2048. Mi problema es que al hacer zoom hay veces que el tamaño de la textura es menor que el del mapa dibujado. Como el movimiento de la cámara solo cambia el centro de dibujo del buffer principal, la textura sale cortada.

Se os ocurre algún método para solucionarlo?
#208
Proyecto dx_lib32 / Re: VB no ha muerto...
17 de Febrero de 2011, 03:44:16 PM
Hola!

Mucha gracias por responder tan rápido, así da gusto.
Efectivamente trabajo con .NET (Concretamente con la versión 3.5.Empeze con 4.0,pero he decidido usar la anterior para tener mayor compatibilidad).

Haber si me podeis ayudar con algunos problemillas que tengo:
He empezado a hacer pruebas para el desarrollo del "SimCity" que comenté. La idea es que sea en perspectiva isométrica.
Lo que he hecho es crear algunas estructuras para manejar elementos en el espacio (Punto3D,Vector3D,etc),y luego mediante una transformación  dibujo dichos elementos en isométrico.
Para generar un escenario guardo en una matriz los valores tridimensionales de los vértices de la malla. Por ejemplo,en un escenario de 100x100 sería así:

Dim Malla(99,99) as Punto3D

        For i As Integer = 0 To 99
            For j As Integer = 0 To 99
                Malla(i, j).X = i * 10
                Malla(i, j).Y = j * 10 'Así la celda tiene 10 pixels de ancho y de alto
                Malla(i, j).Z = 0
            Next
        Next


Y luego para dibujarlo obtengo sus representaciones y uso el método DRAW_Trapezoid:

Dim Vertices(3) as Vertex

for i as integer=0 to 99
   for j as integer=0 to 99
      Vertices(0).X=Matriz(i,j).RepresentacionIsometrica.X
      Vertices(0).Y=Matriz(i,j).RepresentacionIsometrica.Y
      Vertices(0).Color=Color.Blue.ToArgb
      ..... Así con los cuatro vertices
   next
next
Graphics.DRAW_Trapezoid(Vertices)


Vi en la documentación el tema de los RenderTarget y me pareció perfecto: Así solo recalcula cuando hago zoom,y el movimiento de cámara lo hago dibujando la textura del RenderTarget en un lado u otro.
Establecí el tamaño de éste a 2048x2048. Mi problema es que al hacer zoom hay veces que el tamaño de la textura es menor que el del mapa dibujado. Como el movimiento de la cámara solo cambia el centro de dibujo del buffer principal, la textura sale cortada.

Se os ocurre algún método para solucionarlo?
#209
Proyecto dx_lib32 / VB no ha muerto...
16 de Febrero de 2011, 09:53:43 PM
Hola, soy nuevo aquí en Stratos.

Me gustaria agradecer el trabajo realizado por [EX3] durante tantos años con ésta librería.
Empecé a programar con VB6 hace dos años y desde un principio estuve buscando una manera simple y eficiente de programar juegos.
Pero no había manera... tenías DrawCircle y poco más. Además era lentísimo.
Cuando me pasé a .NET creí que había visto el maná con GDI+ pero seguí sufriendo las consecuencias de operar con tropecientas capas de sistema operativo...

Hace poco encontré la página de dxlib32 y me entro la curiosidad....
¡Maravilloso! En menos de diez minutos ya tienes una aplicación con unos gráficos y un rendimiento escepcional.
Sinceramente,creo que tiene muchísimo potencial.
Tanto es así que me estoy planteando seriamente currarme un juego éste verano, algo así como un SimCity...

En fin, solo quería agradecerte tu trabajo. Son éste tipo de cosas las que hacen que VB perdure hoy en día. Porque estoy harto de que cuando la gente me pregunta con qué programo y contesto VB, me digan: "Ba... eso no sirve para nada"

A partir de ahora podré decir: "¿A si?..., ¡PUES HAZ TU ESTO, HABER SI PUEDES!

Mucha gracias.


PD: Aunque el proyecto  esté terminado, ¿Seguiras participando en éstos foros en el futuro? Me gustaria que si me surgen dudas pudieras ayudarme.





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.