Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Sistema De Partículas 2d

Iniciado por Vandalism, 07 de Febrero de 2006, 09:42:41 PM

« anterior - próximo »

Vandalism

 Pues eso...necesito implementar un sistema de partículas para trabajar conjunto con sdl, que puedo usar ??? es para hacer sacar fuego a las naves que sean impactadas con misiles, en un juego que estoy haciendo .

gracias de antemano!!!

TheAzazel

 hace unos meses colson estuvo con un sistema de particulas... no era para SDL pero eso da igual.

lo mismo si nos lee nos puede enseñar lo que hizo porque por mi parte, quiero incluir un sistema de particulas a CRM32Pro....

Capiflash

 Yo tb estaria interesado en un sistema de particulas 2D para SDL , a ver si alguno alumbra un poco


javiel

 Yo tb estoy liado con eso. Estoy programando desde hace un tiempo en SDL y ahora me he pasado a SDL con OpenGL. Creo que un sistema de particulas mas o menos decente en 2D necesita de OpenGL para poder hacerlo. Llevo poco tiempo con OpenGL pero creo que es lo mejor. No se que opináis al respecto. A lo mejor lo que necesitas lo haces con SDL directamente pero sobretodo a la hora de colorear las imágenes, OpenGL puede hacer unos efectos muy chulos. El otro día por aqui me pasaron esto:

http://pagina.de/fx-code

en descagas tienes un fuego hecho con OpenGL. Espero que te sirva. No se si has pensado el pasar tu juego a SDL+OpenGL, pero puede ser una buena idea si no lo has hecho ya. Yo llevo haciendo un juego (matamarcianos) desde hace dos años en SDL y portarlo a SDL+OpenGL es demasiado, pero estoy liado con otro juego más pequeño y lo he portado en 1 semana y estoy bastante contento pq el rendimiento es mucho mejor y me das más posibilidades (rotar, escalar, etc...)

Lo digo desde mi poca esperiencia en estos temas, sólo es lo que me parece ¿que os parece usar OpenGL para 2d?

un saludo
uper-Tirititran: el superhéroe gaditano (http://www.super-tirititran.com)

[EX3]

 
Cita de: "javiel"Creo que un sistema de particulas mas o menos decente en 2D necesita de OpenGL para poder hacerlo.
Imagino que esto lo diras en caso de tener que desarrollar con SDL, no? por que saliendo de SDL, Direct3D tampoco es mala opcion (no vayamos a iniciar otro flame sin fin OGL Vs DX :P)

Aun con todo esto, SDL por si misma (modo software, sin aceleracion via OGL) no generaba tambien efectos de alphablending como aditivos y sustrativos entre otros? Fenix por ejemplo usa SDL y sin aceleracion via OGL y genera tales efectos con resultados mas que decentes.

No se, pero creo que la parte grafica no es lo esencial en un sistema de particulas si no el propio sistema de particulas en si, el codigo que genera las coordenadas de donde tiene que ir cada particula, me explico, no?

Salu2...
José Miguel Sánchez Fernández
.NET Developer | Game Programmer | Unity Developer

Blog | Game Portfolio | LinkedIn | Twitter | Itch.io | Gamejolt

ZüNdFoLGe

 
Cita de: "[EX3"]
Cita de: "javiel"Creo que un sistema de particulas mas o menos decente en 2D necesita de OpenGL para poder hacerlo.
Imagino que esto lo diras en caso de tener que desarrollar con SDL, no? por que saliendo de SDL, Direct3D tampoco es mala opcion (no vayamos a iniciar otro flame sin fin OGL Vs DX :P)
Un sistema de partículas "mas o menos decente en 2d" no necesita para nada de OGL para poder hacerlo. Dependiendo de la implementación, el motor influye solamente a la hora de desplegar la posición de la partícula por pantalla, al intercambiar una partícula por un sprite o un modelo 3d o a la hora de detectar colisiones de partículas con objetos. En muchos casos la partícula es tan solo un pixel.

Citar
No se, pero creo que la parte grafica no es lo esencial en un sistema de particulas si no el propio sistema de particulas en si, el codigo que genera las coordenadas de donde tiene que ir cada particula, me explico, no?

Exactamente, luego de crear una partícula el proceso de animación se basa en actualizar la posición en base a la velocidad, aceleración y dirección que haya tomado inicialmente, y obviamente modificar la velocidad y energía de cada partícula. La energía podría considerarse para el tiempo de vida de una partícula, asi cuando la energía sea menor que la tolerancia ("energía mínima") la partícula en cuestión dejará de existir. Otra parte importante y que también ifluye el motor es a la hora de detectar la colisión de la partícula con algún objeto (hablando de un sistema de particulas "decente"), habrá que modificar la posicion, dirección, velocidad y energía de cada partícula. Al final del ciclo anterior se muestra la partícula en base a su posición resultante. Esto no es nada de otro mundo.

Las partículas son animadas en base a reglas que dependen del modelo en particular. No es lo mismo una explosión de un misil contra una pared que una explosión aérea, y también dependiendo del modelo en particular pueden variar las características de cada partícula.

Tengo unas clases de un sistema de partículas que usé para explosiones de un juego 2d, podría mejorarlo y adaptarlo mismo a sdl para que sea facil de entender. Avisaré por aquí cuando lo haga  (ole) . Para adaptarlo a 3d simplemente hay que considerar otra coordenada, pero los algoritmos son exactamente iguales.

javiel

 
CitarTengo unas clases de un sistema de partículas que usé para explosiones de un juego 2d, podría mejorarlo y adaptarlo mismo a sdl para que sea facil de entender.

Eso sería muy interesante. Yo por lo menos espero con inpaciencia ;-)

Por lo demás cuando dije lo de OGL era por el tema de rendimiento. SDL tiene sus cosas, pero por ejemplo en las rotaciones y para escalar son muy chungos y no se puede abusar de ellos, por lo menos es mi experiencia

De todas formas era la opinión de mi corta experiencia en esto de los videojuegos, seguiré aprendiendo ;-)

saludos a todos
uper-Tirititran: el superhéroe gaditano (http://www.super-tirititran.com)

TheAzazel

 Tambien espero esas clases de particulas...mas q nada para no reinventar la rueda :)


javiel, obviamente hacer rotaciones y escalados con SDL no es lo mas optimo ya que se tendra que hacer por software.... pero vamos, con un par de trukis puedes conseguir velocidades decentes siempre y cuando al escalado le pongas restricciones(por ejemplo q solo sea 2x,4x,8x,etc..)
Ademas, SDL tiene integrado un backend que utiliza OpenGL para acelerar lo 2D, se llama glSDL y es la leche, yo estoy agregando este backend a CRM32Pro que sera, junto con lo que estoy ahora y quizas un sistema de particulas el final de su desarrollo.

saludos

javiel

 no conocía lo de glSDL. ¿como va eso? ¿para que sirve exactamente?

Yo estoy trabajando SDL+OGL, uso SDL para la creación de la ventana, reconocimiento de eventos y esas cosas, y OpenGL para poder trabajar con texturas y las cosas van muy rápidas. Pero tengo un juego que espero terminar en breve y pasarlo todo a esta forma de trabajo es muy costoso ya que está casi finalizado

¿glSDL me ayudaría a mejorar el rendimiento del juego sin tener que hacer demasiado cambios? Supongo que no será sencillo pero ¿que opinas?

Me puedes pasar algo de información, voy a buscar en google

saludos

uper-Tirititran: el superhéroe gaditano (http://www.super-tirititran.com)

TheAzazel

 En teoria, usar glSDL es muy sencillo y no hay q cambiar casi nada....

puedes encontrar mas detalles aqui:

http://icps.u-strasbg.fr/~marchesin/sdl/glsdl.html


pero vamos, si ya te has metido con OpenGL+SDL lo mismo muy util no te es...todo es cuestion de para que lo vas a usar...por ejemplo, portar un proyecto es muy sencillo, yo he pasado los mios con solo recompilar :) y ahora utilizan aceleracion opengl en 2d por todo el morro :P

javiel

 cuando hablabas de glSDL pensaba que era una librería que había que agregar al proyecto. Este artículo que dices parece que es como una serie de criterios a seguir pero no tienes que instalarle nada al juego.

Muchas de las cosas que pone ya las hago, pero me lío un poco pq no se realmente lo tengo todo bien hecho.

En tu proyeto ¿que haces? ¿Sigues esos pasos y ya está?

Otra cosa es esto:

export SDL_VIDEODRIVER=glSDL

que yo no lo pongo en Linux. La verdad que estoy un poco liado con el glSDL, seguiré buscando

gracias por todo
uper-Tirititran: el superhéroe gaditano (http://www.super-tirititran.com)

TheAzazel

 Es facil javiel, SDL es una API de alto nivel que proporciona funciones genericas para por ejemplo y en el caso que nos ocupa, volcar una superficie a video. Pues bien, en las entrañas de SDL utiliza lo que llama backend que no son mas que renderers especificos para cada plataforma, para windows tienes los backend de directx y windib, para linux x11, dga, fbcon entre otros... y que significa todo esto? que cuando tu haces un SDL_BlitSurface() dependiendo del backend que estas utilizando, hara el bliteo con directx,windib,x11,dga...

Cuando compilas SDL puedes indicar que backends incluir, por defecto en la lib que te puedes bajar tiene soporte en windows para directx y para windib pero si quieres, puedes deshabilitar alguno o poner alguno por defecto ya que para cambiar de un backend a otro se utiliza eso que has puesto de:

set SDL_VIDEODRIVER=glSDL o ddraw o windib

digamos que el sistema que tiene SDL para cambiar de backend es usando esta variable de entorno.

Pues bien, hablando de windows... el backend de windib lo hace todo por software y ddraw puedes hacerlo por software o por hardware, cuando utilizas esto ultimo, tu tarjeta grafica realizara todo el bliteo y eso es mucha velocidad...pero desafortunadamente, no hay(o no conozco) ningun driver de ningun fabricante que soporte en ddraw operaciones con alpha, luego todas las transparencias y demas...seran lentisimas al margen de q ya nadie desarrolla nada para ddraw...es algo a extinguir (de hecho en Win64 yo he tenido que deshabilitar todos los backends de directx porque daba problemas) y aqui es donde entra glSDL.

Es un backend mas.. vamos, que no tienes que cambiar casi nada en tu codigo, tan solo seguir un poco las indicaciones del enlace que te di y que es lo que hace esto? pues utiliza aceleracion hardware OpenGL en modo 2D y por tanto todo vuela y ademas... con soporte completo para alpha!!!.

Por el momento, glSDL NO esta incluida en SDL, pero en futuro muy cercano lo estara, por la lista de distribucion que ya hemos pedido varios que lo incluyan porque esta bastante probado, ademas, yo tengo un benchmark en mi web que compara glSDL,ddraw y d3d(gracias a zupervaca jeje) por lo que es bastante posible que para la proxima revision de SDL 1.3 que traera algunos cambios importantes...tambien lo incluya por defecto. Por ahora, si estas interesado en probar glSDL te puedo pasar el link donde te puedes descargar SDL con glSDL incluido pero no es oficial.

bueno, espero que se hayan despejado tus dudas...cualquier cosa ya sabes, dimelo. Por cierto, una curiosidad...porque no utilizaste CRM32Pro? a ti te iria como anillo al dedo...

Saludos

CoLSoN2

 Oops, no se cómo se me había pasado este thread por alto.

Efectivamente escribí un artículo sobre cómo lo tengo yo montado para crear sistemas de partículas en mi engine 2D. Después de hacerlo descubrí cómo lo hace Torque2D y se me cayeron los cojones al suelo de la envidia, pero realmente yo no necesito nada tan complejo, así que ya me está bien algo sencillo como lo que tengo.  
Manuel F. Lara
Descargar juegos indie  - blog sobre juegos indie y casual
El Desarrollo Personal.com  - blog sobre productividad, motivación y espíritu emprendedor

TheAzazel

 Muchas gracias Colson2, nunca habia leido nada de tu web pero el documento sobre particulas me va a ser util mas que nada para ni reinventar la rueda ni cometer errores tontos jeje

hasta luego!






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.