Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Engine Gráfico En 2d?

Iniciado por _XUTI_H_, 19 de Septiembre de 2005, 10:09:39 PM

« anterior - próximo »

Loover

 Esto es lo de siempre. La misma discusión una y otra vez por estos foros. Todo depende de lo que quieras hacer:

A ) Un juego
B ) Un motor 2d
C ) Un juego y un motor 2d

Y aquí te pongo algunas (ojo, no todas, solo algunas, de las opciones que tienes para 2d)

Si quieres A )

1) Usando pseudo-script
1a) Con aceleración gráfica:
- Torque 2d
- Blitz

1b) Por software
- Fenix


2) Usando una librería junto  con un lenguaje como c++
- SDL
- Popcap framework
- Cmp32
- Dxlib_32
- Looverlib
- Ptk


Si quieres B )
1) Con aceleracion hardware
- Ogl
- Direc3d

2) Por sofware
- Tu mismo con tu mecanismo

Si quieres C )
Podría aplicarse el punto 2) de A) pero quizás ampliando el motor 2d algo más sin pensar solo en el juego en cuestión sino generalizándolo algo más.

Y echale un vistazo a mi librería 2d, muy chula pero asquerosamente no portable :) (solo D3d9)

Un saludo!
IndieLib Libreria 2.5d utilizando aceleración por hardware para la programación de juegos 2d.
Indie Rover The monkeys are reading!

_XUTI_H_

 Wueno, vamos a ver, por ejemplo este es un proyecto pa una asignatura de la carrera ZeldaEU. Dibuja utilizando GDI poque era lo que pedian en la asignatura: MFCs con C++ y GDI para dibujar en contextos de dispositivos.

Estoy pensando en continuar con el proyecto y llegar a poder hacer un juego completo. Debo implementar muchísisimas cosas, pero entre ellas un sistema de dibujado decente con doble buffer y esas cosas. El rollo es que si me pego el kurrote con esto, poder utilizarlo después para otros proyectos. Por tanto mi idea es hacer una "especie de motor gráfico en 2D".

A parte, tengo el problema de que con mi colega estoy desarrollando otro "motorcillo" con SDL. Mi principal aspiración seria diseñar un "cosa wapa" que pudiera integrar en este proyecto, y que me sirviera para el otro también (y para futuros intentos, jeje)

Wueno, si quereis le pegais un vistazo y me comentais ...
(X cierto, inicio rápido: abrir el editor, menu Fitxer/obrir y abrir el mapa Aventura.zel. Podeis toketear lo q querais, o jugar con F1)

Salu2 y gracias a todos.

EDIT: Por cierto zupervaca, yo tb soy asiduo de charas-project como veràs, jeje :P
UTI

Ray

 
Cita de: "zupervaca"que bueno ray, gracias a ti he recuperado las 200 fps que perdia en opengl respecto a directx, es increible jaja, perdona que me ria, pero es que me di cuenta que no tenia el glFlush antes del swap (uoh)
Y yo acabo de comprobar por experiencia ajena los efectos que tiene el no ponerlo :lol:

por cierto... no necesitaras por casualidad esto:

glGetTexImage

_XUTI_H_

 Hola de  nuevo. Cada vez creo que estoy más convencido de utilizar OpenGL. Pero todavía tengo unas dudas. A ver si Ray o alguien puede echarme un mano:

+ (Ante todo y pudiendo pecar de igsnorante d la vida supongo que el OpenGL tiene algún tipo de aceleración de hardware) El tema de ir canviando de textura para cada sprite (GlBindTexture) , ¿supone envio de transacciones PCI a la tarjeta?, según tengo entendido esto retrasa bastante el dibujado.
Entonces tendria que cambiar la forma que tengo de dibujar para optimizar este proceso, ya que ahora lo que hago es ordenar el dibujado por una profundidad "virtual", es decir, una variable que dice que sprite está más al fondo, y que sprite está más cerca ... y puede darse el caso de que por ejemplo el array de sprites listos para dibujar en orden tenga la siguiente secuencia: Text1, Text4, Text1, Text6, Text2, Text4, ...
Que me recomendais, ¿se puede activar algún tipo de z-buffer?, ¿es una buena solución?, ¿usar el tema ese de la multi-textura (se supone que reducimos la velocidad de dibujar cada "poligono")?, ¿crear textures enormes con todos los sprites posibles e ir cambiando la coordenadas u,v?, ¿más opciones?

Arggg, ya me sale humo, es que esto d pensar muxo, jeje  (uoh)

Bueno, y por si alguien no vio el link de antes es este ZeldaEU

Salu2 y gracias
UTI

Zaelsius

 El cambio de textura en OpenGL puede provocar una transferencia desde la memoria del sistema hasta la memoria de vídeo, dependiendo de si la textura está ya allí o no. Es interesante que ordenes los sprites por textura, aunque no indispensable para obtener un rendimiento aceptable con el hardware de hoy en dia. Si quieres hacer algo comercial, entonces sí deberias preocuparte por el tema, ya que en tarjetas antiguas con 16mb podrías tener problemas de "texture trashing".

Lo preferible suele ser planear la carga gráfica de modo que todas las texturas que necesitas usar en un sólo frame quepan en memoria de vídeo. No siempre es posible, en ese caso, ordena por texturas para realizar el menor número de intercambios.

El uso del zbuffer suele ser casi "gratis", puedes usarlo sin miedo.

El problema principal de OpenGL ahora mismo es la incertidumbre sobre su rendimiento en el próximo Windows Vista <_< .. aunque dado que DirectX9 tambien estará bajo una capa de compatibilidad, deberia ir bastante suelto. Teóricamente, un PC que es capaz de hacer funcionar correctamente Windows Vista, deberia tener una tarjeta gráfica moderna.

PD: Por cierto el multi-texturing sirve para dibujar polígonos con varias texturas combinadas, que no suele ser demasiado frecuente en juegos 2d.


Ray

 No te preocupes, OpenGL esta más que preparado para mover y trabajar con una gran cantidad de texturas y calculos 3d. Por lo que podras dibujar cientos de sprites 2D a 100 fps, con alfas, mezclas, filtros, recortes, máscaras, tramados, operaciones lógicas de color, niebla, etc... sin problemas, si son sprites muy grandes no podrá soportar cientos lógicamente, pero de todas formas no te iban a caber en la pantalla por lo que no hay ningun problema.

glBindTexture sirve precisamente para eso, para cambiar rapidamente de una textura a otra, el efecto que tu dices surgiría si cargasemos la textura con glTexImage2D antes de dibujar cada sprite  (que también se puede hacer).

Lo de crear texturas enormes y asignar al sprite las cordenadas de textura es buena idea para acelerar el tema, y además OpenGL solo puede trabajar con texturas que sean potencias de 2, de 256x256 o 512x512 está bien, tampoco hace falta que te pases.

[COUTE]
puede darse el caso de que por ejemplo el array de sprites listos para dibujar en orden tenga la siguiente secuencia: Text1, Text4, Text1, Text6, Text2, Text4, ...Que me recomendais, ¿se puede activar algún tipo de z-buffer?
[/COUTE]

Si, se puede, si te fijas en algunos de los ejemplos situaba los objetos con glTranslate la cual tiene 3 coordenadas. x, y, z, la coordenada z podrás usar para establecer la profundidad de cada objeto. pero para usar el z-buffer o test de profundidad como siempre hay que activar el estado correspondiente concretamente glEnable(GL_DEPTH_TEST); y para establecer el tipo de operación glDepthFunc(GL_LESS); dibujar cuando sea menor (más cerca).

Tambien al usar el z-buffer se usa un buffer paralelo al de color, con lo cual tendriamos 2 buffers diferentes que hay que borrar al mismo tiempo en la llamada a clear.
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

También hay ampliar la profundidad del volumen de trabajo, por ejemplo si queremos que tenga de profundidad 100 hacia atras y 500 hacia adelante:

glOrtho(0, AnchoVentana, 0, AltoVentana,     -100.0, 500.0);

Los dibujos saldran igual de tamaño independientemente de la distancia porque hemos usado glOrtho, si queremos que tenga perspectiva usariamos glFrustum, y los objetos más lejanos saldrás mas pequeños. pero eso ya pertenece al mundo de las 3d.

hmmm.... La verdad es que nunca he probado a usar el z-buffer sobre una proyeccion ortogonal por lo que no puedo asegurar que funcione eso que te he comentado y si habrá algún tipo de problema en hacerlo.

Zaelsius:
[COUTE]
El problema principal de OpenGL ahora mismo es la incertidumbre sobre su rendimiento en el próximo Windows Vista dry.gif ..
[/COUTE]

Si, es una cabronada, seguramente la pretensión es que OpenGL esté siempre un paso por debajo que DirectX en cuanto a rendimiento, pero me da igual, sigo prefiriendo OpenGL, y para 2D siempre va a ir sobrao.

PD: ZeldaEU me da error.

_XUTI_H_

 Perdon por el archivo corrupto, lo habia subido (por alguna extraña razón) como ASCII en vez de como BINARIO).

Ahora ya funciona, d todas formas pongo el link otra vez más: ZeldaEU.

A la tercera va la vencida. Salu2
UTI

Ray

 Ya sale  (ole)

Pero no me funciona.... :(

vamos, quiero decir que no se como se maneja, porque toco todas las teclas y el ratón y no hace nada, se ve como una cama y un rectangulo sobre un mapa.

tiene buena pinta para ser en gdi, y la música esta guapa para ser midi, lástima que no haya podido probarlo.

Pues sí, estaría bien que tu proximo proyecto fuera ese mismo juego pero en SDL/OpenGL, aunque.... decías que ya se había montado el pollo en el programa y se hacía muy dificil de actualizar, no te preocupes eso suele pasar a lo primero, y la solución es empezarlo de nuevo, siempre sale mejor cada vez que repites y si no mira a los diseñadores del DirectX que cada dos años lo hacen de nuevo y les sale un poco mejor.

Y no tengas prisa,  piensa que necesitarás ampliar y reutilizar muchas cosas en el futuro, no atajes, no escatimes, no utilices variables globales si no es absolutamente imprescindible, luego lo vas a agradecer muchísimo.  Intenta también aprovechar los algoritmos y rutinas que ya tienes hechos.

Un saludo y hasta otra.

_XUTI_H_

 
Cita de: "Ray"toco todas las teclas y el ratón y no hace nada, se ve como una cama y un rectangulo sobre un mapa.

Eh??
Bueno, no paran de salir bugs ultimamente, jeje XDDDD

Es un editor de niveles, una vez abres el aventura.zel (desde menu "Arxiu/obrir", con doble-click desde el documento no carga bien) puedes ejecutarlo con F1 o desde el menu "Edicio/Executa Joc". Los controles estan en el txt.

Tampoco es gran cosa, pero como he visto que te habia interesado ...

Por cierto, si alguien lo prueba y no le funciona me molaria que me dijerais cual es el error y que equipo teneis. Gracias :)
Citary la música esta guapa para ser midi,
Gracias :D, es bastante repetitiva, pero aunque hubiera dispuesto de programas con samples y hubiese podido poner la musica en ogg, tampoco hubiera ganado mucho el tema, todavia me falta mucho que aprender tb de esto XDD
UTI

[EX3]

 A mi si me funciono y no he visto ningun fallo exceptuando el parpadeo que provoca el refresco del GDI, pero esto es inevitable :)

Esta muy bien el editor de escenarios y el motor en si, sobre todo para estar hecho con el GDI (ole)

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.