PDA

Ver la versión completa : Snowflakes - Efecto 2D en Tiempo Real



fjsantos
24/12/2007, 11:47
Buenos días a todos:

Con motivo de la navidad, me gustaría compartir el siguiente efecto con vosotros. Se trata de Snowflakes, copos de nieves que van cayendo deslizándose por el 'decorado' formando pequeños montones.
Es un efecto bastante curioso, que realicé hace años en otro lenguaje.
Con este efecto, he aprendido prácticamente lo mismo que con blobs, por lo que he asimilado los conocimientos que voy poseyendo del lenguaje.
Como de costumbre, os dejo el código para compartir lo que he aprendido y por si alguine se anima a mejorarlo (así aprendo también yo), aunque en principio, para este efecto no hace falta ningún tipo de optimización, ya que considero la velocidad del mismo, más que adecuada.

Os mando un saludo a todos, no sin antes desearos feliz navidad.

Un saludo, fjsantos.

loixartx
24/12/2007, 12:01
está muy conseguido, le echaré un vistazo al código.

Gracias por compartirlo.

Un saludo y felices fiestas. :brindis:

joanvr
25/12/2007, 03:44
Una optimización bastante importante seria dejar de usar las funciones GetPixel y PutPixel, y usar punteros directamente sobre la pantalla.

Estopero
25/12/2007, 04:19
Una optimización bastante importante seria dejar de usar las funciones GetPixel y PutPixel, y usar punteros directamente sobre la pantalla.

enfermo de la optimizacion!!!!! XDDDDDD

Aunq es cierto q las famosas funciones getPixel y putPixel (de las primeras busquedas en google xD) que usamos todos en SDL son bastante costosas en recursos, lo bueno que tienen al principio es q son muy genericas y te valen pa to, pero una vez ya has aprendido supongo q es mejor adaptarlas a las necesidades de tu programa :)

joanvr
25/12/2007, 04:54
enfermo de la optimizacion!!!!! XDDDDDD

Aunq es cierto q las famosas funciones getPixel y putPixel (de las primeras busquedas en google xD) que usamos todos en SDL son bastante costosas en recursos, lo bueno que tienen al principio es q son muy genericas y te valen pa to, pero una vez ya has aprendido supongo q es mejor adaptarlas a las necesidades de tu programa :)

Una cosa es ser un enfermo de la optimización y la otra tener que usar toda una funcion, switches, casts, etc etc, para conseguir el valor de un pixel o modificarlo. Almenos en ese caso ha modificado algo las funciones para que solo trabaje en 8 bits

Estopero
25/12/2007, 05:04
Una cosa es ser un enfermo de la optimización y la otra tener que usar toda una funcion, switches, casts, etc etc, para conseguir el valor de un pixel o modificarlo. Almenos en ese caso ha modificado algo las funciones para que solo trabaje en 8 bits

Oie no sera una indirecta hacia mi codigo verdad???????? :mad::mad::mad::mad::mad::mad::mad:

xDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD

:*

joanvr
25/12/2007, 05:16
Oie no sera una indirecta hacia mi codigo verdad???????? :mad::mad::mad::mad::mad::mad::mad:

xDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD

:*

No hombre, aunque creo recordar que en un codigo que me pasaste las usabas, hay mucha gente que las usa, cuando acceder directamente al campo pixels de una SDL_Surface no es tan complicado...

chipan
25/12/2007, 05:36
Esas funciones gastarán recursos, pero si las ponen por algo están; son como los semáforos; a veces entorpecen la marcha, pero ayudan a evitar accidentes, atascos y demás estropicios (que en el mundo de la programación ocurren al trabajar mucho y/o a ciegas con los punteros).

joanvr
25/12/2007, 12:10
Esas funciones gastarán recursos, pero si las ponen por algo están; son como los semáforos; a veces entorpecen la marcha, pero ayudan a evitar accidentes, atascos y demás estropicios (que en el mundo de la programación ocurren al trabajar mucho y/o a ciegas con los punteros).

Los punteros son una gran herramienta, tan potente como versatil. No saber o no querer usarlos porque pueden causar problemas no me parece un buen razonamiento. Almenos yo empecé a programar para la gp32 en su dia para aprender cosas y superarme a mi mismo (cosa que creo que además comparte el señor de estas demos), así que cualquier cosa que suponga una dificultad "adicional" es interesante para aprender.

De todos modos, yo no digo que usar las funciones esas sea un sacrilegio y quien las use deba morir xDD Solo que si pregunta que se puede optimizar yo respondo que lo más sencillo y que probablemente ganaria unos cuantos fps es eso. :P

fjsantos
25/12/2007, 19:10
Buenas Tardes.

joanvr, estoy totalmente de acuerdo contigo, en que es mejor usar punteros y acceder directamente a la memoria de video (aunque los métodos que he empleado devuelven un puntero a esta zona). En realidad, usé estos métodos, como bien apuntan chipan y estopero por comodidad, y porque una vez resuelta la demo, no tuve necesidad de ningún tipo de velocidad adicional (por lo que no me molesté en optimizar el código).
Si te fijas en la otra demo que subí en este foro ('blobs'), sí que uso los métodos de acceso directo a memoria y trabajo con punteros (aunque aún existe el método PutPixel, pues el principio de realizar la demo sí que lo utilizaba, al optimizarla dejé de usarlo ya que necesitaba agilizar el código todo lo posible para obtener la mayor velocidad).
En esa otra demo 'blobs', aún me gustaría consegir algún que otro frame extra, así que te animo a que consegas algún que otro frame con alguna técnica de optimización (estoy seguro que podría aprender algún truco de optimización ya que aún me queda un largo camino de aprendizaje con este lenguaje).
Como tú muy bien indicas, mi propósito de estar aquí, es por un lado, mejorar toda mi técnica de programación (y en particular de c, c++ ya que en mi trabajo diario tan sólo utilizo c#); por otro aprender todo lo que pueda de gente que tenga algo que ofrecer y enseñar (y en estos foros descubro día a día como todo el mundo aporta su granito de arena, método o punto de vista); y por último, aportar yo también mi granito de arena (aunque hoy por hoy, este granito es casi imperceptible ya que tan sólo llevo 2 a 3 semanas sumergido en este lenguaje).

Aún quiero realizar un último efecto de este tipo, un fuego (aunque ya he observado un maravilloso fuego en la zona de descarga), este que hago yo, tiene un pequeño extra que no he visto en ningún otro.
Luego quizá me meta en algo de emulación, tema en el que estoy MUY verde, ya que nunca realicé ninguno. (En esta etapa me convertiré en un preguntón compulsivo). En un foro leí algún que otro artículo al respecto, así que comenzaré con el de Space invaders (recomiendan este para empezar por ser más sencillo). Estoy seguro que en este punto, me podrás echar más que una mano para temas de optimización (ya que como lo tengo encajado hoy por hoy no creo que me llegue a los 60 fps).

Bueno, un saludo y de nuevo Feliz Navidad.