Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





RenderTarget demasiado pequeño....

Iniciado por Manu343726, 17 de Febrero de 2011, 03:48:35 PM

« anterior - próximo »

Manu343726

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?

Hechelion

Me he perdido un poco entre las dos preguntas, pero que te recomiendo de lo que entendí.

La librería es 2D, así que piensa en 2D, será más simple que crear un mundo en 3D para luego pasarlo a 2D, básicamente porque la librería no tiene ninguna utilidad que nos facilite esa tarea. Por ejemplo, el uso de Draw_Trapezoid no le veo mucha utilidad, básicamente porque en un juego tipo Simcity, los gráficos van a salir de un frameset, y como Trapezoid dibuja un cuerpo solido, cuando coloques la "textura" el trapezoide va a quedar oculto, con lo cual estarás dibujando algo que no se va mostrar.

Una solución es usar un mapa de tile común y silvestre (no en isometrica) lo creas en el target render y rotas la imagen en 45º y luego dibujas a partir de la textura y usas una función de conversión de coordenada para manipular los objetos. Sin embargo, el problema que tiene esa técnica es el target render consume mucho equipo.

Lo otro es que te crees un mapa de tiles isometrico y trabajes todo como tile.


Respecto a la segunda duda, tendrías que colocar el código para ver que puede estar pasando.

Saludos.

Hechelion

Estuve pensando un poco. y la siguiente clase podría servir para gráfica tilemap en isométrica
http://www.stratos-ad.com/forums/index.php?topic=12760.0

No te lo recomiendo de una, porque no está pensado para isométrica, pero si colocas 2 capas de tiles con un desfase, logras generar mapas isométricos, no sé si cumpla tus expectativas, ya que el sistema sería bastante similar al Civ2, pero en una de esas te puede servir.


Manu343726

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.


Hechelion

Cita de: VBManu en 18 de Febrero de 2011, 11:35:47 PM

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.

¿Te refieres a que la textura de 2000*2000 te queda chica o a que se dibuja mal?
Si es lo primero, vas a tener que cambiar de idea, porque la librería solo acepta un target render (o eso tengo entendido) y el tamaño máximo dependerá de la GPU y de cuanto sacrifiques en rendimiento. Por eso que la mejor idea es una tileMap, ya que con un frameSet de 2048*2048 puedes generar mapas equivalente a miles o decenas de miles de pixel.

Si es lo segundo, entonces a colocar el código para darte una mano.

Cita de: VBManu en 18 de Febrero de 2011, 11:35:47 PM

Mi idea es hacer yo ismo todo el motor gráfico (Lo se, es una matada) si no no lo veo la gracia.

No hay problema, en gustos no hay nada escrito  :D






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.