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 »

_XUTI_H_

 Vereis, un colega y yo intentamos hacer un juego multiplataforma (Win32/Linux) en 2D desde hace algun tiempo. Nos dedicamos horas y horas a intentar hacer un motor xa q moviera todo el juego. Y una parte eran los graficos.

Lo que nosotros llamamos "motor gráfico" lo hemos programado usando la SDL sin OpenGL, es decir, utilizando las funciones de Blit de la SDL y algun acceso bloqueando alguna superficie. Esta en C++ y puedes añadir objetos rollo textos, capas, fondos con scroll, sprites, y cosas de ese palo.
Pero los problemas vienen si queremos hacer rotaciones, escalamientos, efectos de color o fades de los sprites y estas cosas.

Que me recomendariais:
1) Utilizar OpenGL para dibujar en 2D (teniendo en cuenta que usaremos SDL para la entrada / sonido / ... )

2) Ingeniarme mis funciones para conseguir estos efectos ( alguna sugerencia ;-D )

3) Otros ...

Por cierto que es eso que he oido de que SDL es muuu leeenttaa pa dibujar, tendriamos alguna otra solución buena para poder conservar el codigo multiplataforma.

Bueno, saludos.
UTI

TheAzazel

 Rotaciones y escalados se pueden hacer usando SDL pero via software por lo que sera lento... depende de la maquina minima que pidais (echa un vistazo a una lib llamada SDL_gfx). Efectos de color pues depende lo que quieras y los fades... se pueden conseguir bien por software.

Tambien puedes mirar glSDL que es un backend 2D que utiliza opengl para la acelaracion y no tendras que tocar nada de tu codigo y con leves modificaciones, podeis conseguir escalados y rotados via opengl utilizando lo que ya tienes hasta ahora.

Otra opcion es utilizar SDL solo para el input,sonido y demas... y utilizar directamente OpenGL en modo 2D.

Y no hagas caso a eso que dicen de SDL = lento, porque no es asi. Si quieres probar benchmark puedes pasarte por mi web y te descargas el glSDL, o en este foro, busca un subforo que se llama CRM32Pro y alli hay otro test puramente 2D y software y de paso ves mi lib... lastima que no la hubieras visto antes jeje, seguro que os habia ahorrado muchas cosas...

Anything else?  :D  

_XUTI_H_

 Ummm, parece bastante interesante lo de tu libreria, le echaré una vistazo de todas formas ... (no sé como puedes codificar en ensamblador, yo me volvía loko en las prácticas con el 8086, jeje )

Lo del backend no sé muy bien q significa, pero le pegaré un ojo al glSDL ese también.

Espero a ojear un poco la CRM32Pro para ver como resuleves algunas cosas y sigo postenado más dudas ...

Gracias.
UTI

TheAzazel

Cita de: "_XUTI_H_"Ummm, parece bastante interesante lo de tu libreria, le echaré una vistazo de todas formas ... (no sé como puedes codificar en ensamblador, yo me volvía loko en las prácticas con el 8086, jeje )

Lo del backend no sé muy bien q significa, pero le pegaré un ojo al glSDL ese también.

Espero a ojear un poco la CRM32Pro para ver como resuleves algunas cosas y sigo postenado más dudas ...

Gracias.
Acabo de actualizar la lib.... despues de trabajar duro en ella. Tenia que pulir varias cosillas por ahi....

Pues pregunta lo que quieras, que si no soy yo, algun otro te ayudara  (ole)

me voy a descansar un poco jeje

_XUTI_H_

 Más preguntas:  :ph34r:

Aunque el juego que pensamos hacer ahora seria freeware, en caso de querer utilizar nuestro motor para realizar un juego, por ejemplo, shareware, más adelante. ¿Como está el tema de las licencias de glSDL y SDL_gfx (y ya puestos tus librerias, TheAzazel, ;-D)?
UTI

pelmazote

 pues a riesgo de que se me ponga a cardo, yo te aconsejo que si lo que quereis hacer es un juego 2d te pilles el BlitzMax, es "sencillo", muy potente y extremadamente flexible, en el sentido de que puedes ampliarlo con tus propias funciones que crees en c++ o las que crean otras personas.

Este lenguaje te proporciona imágenes con alpha, escalables, con bordes suavizados,..., permite programación orientada a objetos y es multiplataforma (windows, linux y mac).

Sobre el tema de las licencias creo que no tienes que pagar ninguna, estoy casi seguro pero no te lo puedo asegurar.

Pues eso, que si lo único que quereis hacer es un juego 2d con una calidad profesional, este es vuestro lenguaje.

Saludos.

_XUTI_H_

 
Citaryo te aconsejo que si lo que quereis hacer es un juego 2d te pilles el BlitzMax
Hombre, de momento nos hemos pegado ya un buen currote con lo que tenemos en cpp, y tampoco creo que sea buena idea tener q rediseñar todo para adaptarlo.
El BlitzMax no lo he usado, me quedé en el Blitz3D, y el tema de programar en pseudoBasic tampoco me emociona especialmente. Pero como te digo no he visto las posibilidades de BlitzMax ...

Realmente acabar el juego ahora mismo puede que no sea lo más importante para nosotros. Lo que buscamos, además de aprender un poco de "tecnologia", es intentar crearnos nuestro propio motorcillo, a nuestra manera y con nuestros vicios (buenos y malos).

De todas maneras llevamos mucho tiempo en plan onda sinosiodal (ahora gastamos esto, ahora intentamos programarlo nosotros, ahora buscamos otras librerias para hacer lo que nos hemos planteamos 1000 veces, ... XDD) y si he de serte sincero no sé como vamos a acabar haciendo las cosas, así que gracias por la reflexión, era lo que nos faltaba para volver a replantearnos otra vez todo (jeje, otra vez en el punto d salida, wueno casi ;) )

Espero + propuestas ...
UTI

pelmazote

 BlitzMax es lo último en motores para videojuegos, actualmente solo es para 2d y deja a años luz a Blitz3d.

Yo tambien estaba haciendo un proyecto en Blitz3D, el cual llevaba muy avanzado en cuanto a la interfaz gráfica, pero debido a las limitaciones de Blitz3D, para mostrar imágenes con bordes suavizados, con alpha,... necesetaba crear unos algoritmos realmente complicados y nada efectivos, por lo que he decidio pasarlo a BlitzMax y la diferencia es avismal, el desarrollo es unas 50 veces más rápido y unas 100 veces de mayor calidad y rendimiento. En cuanto a la velocidad de ejecución es casi similiar a utilizar c++.

Ahora bien, si dices que lo que quieres es crear tu propio motor gráfico con tu "estilo" pues entonces no se para que estas utilizando SDL, ya que es "exactamente" lo mismo que BlitzMax, solamente que este último está mucho más currado.

Un consejo, prueba BlitzMax, busca juegos hechos con el, y no te quedes solo con los ejemplos que bienen en el lenguaje ya que me parecen bastante pobres.

Saludos.

[EX3]

 
Cita de: "pelmazote"Sobre el tema de las licencias creo que no tienes que pagar ninguna, estoy casi seguro pero no te lo puedo asegurar.
80$ para adquirir el programa y su licencia para poder comercializar los juegos que hagas con el. Echa un vistazo en su web.

Cita de: "pelmazote"BlitzMax es lo último en motores para videojuegos, actualmente solo es para 2d y deja a años luz a Blitz3d.
Weno, eso de que es lo ultimo en motores... BlitZ Max no es un motor, es un lenguaje de programacion orientado a juegos, no es lo mismo. RPG Maker por ejemplo si es un motor de juegos.

Cita de: "pelmazote"En cuanto a la velocidad de ejecución es casi similiar a utilizar c++.

Imposible, siendo un lenguaje interpretado como es no puede tener una velocidad similar a la de un lenguaje compilado como es C/C++ ni por asomo.

Cita de: "pelmazote"Ahora bien, si dices que lo que quieres es crear tu propio motor gráfico con tu "estilo" pues entonces no se para que estas utilizando SDL, ya que es "exactamente" lo mismo que BlitzMax, solamente que este último está mucho más currado.
No te equivoques, como te he dicho atnes, BlitZ Max es un lenguaje con funciones orientadas a la creacion de juegos (el resultado es un interprete de codigo al fin y al cabo), SDL simplemente es una libreria de funciones, no un lenguaje. SDL no deja de ser una simple capa que añades a un lenguaje como C++, es como si me dices que DirectX u OpenGL son lo mismo que BlitZMax cuando no es asi :P

SDL + C++ te da mas libertad en cuanto a programacion y requiere mas trabajo de desarrollo que BlitZ Max o cualquier otro lenguaje de juegos que te da las cosas tan mascadas.

_XUTI_H_, aunque habeis dejado claro que quereis desarrollar vuestro propio motor con SDL y C++ yo os recomendaria que echarais un ojo a otro lenguaje de programacion de juegos que no esta nada mal, completo, multiplataforma, con una gran comunidad detras de el y sobre todo gratuito, Fenix (Sitio oficial, Portal FenixWorld)

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

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

Ray

 No quiero menospreciar a los diversos motores que hay para programar juegos, tampoco pondré a caldo a pelmazote, cada cosa tiene su utilidad para según la persona, el lugar y el momento,  pero en este caso parece claro que XUTI quiere aprender y tener su propio motor, y hacer sus propios efectos, tener algo portable, rápido, gratis, y que además lo que aprenda no se quede obsoleto en 4 días.

Esta bien usar SDL y las librerías de Azazel porque hay muchas cosas que no son de programación gráfica que es un coñazo tener que implementarlas uno mismo, pero para lo que es el dibujo en sí, lo mejor es usar OpenGL, potencia y versatilidad sin más limite que uno mismo.

Citar2) Ingeniarme mis funciones para conseguir estos efectos ( alguna sugerencia ;-D )

te pongo unos ejemplos para que veas de que va más o menos, luego busca más información sobre los comandos, mira las ayudas, tutoriales y ejemplos terminados, practica y experimenta mucho, y ve creando tus propias funciones a medida que haces cosas nuevas. Esto no se aprende en cuatro días pero al menos lo que aprendas te servira para siempre y no dependeras de nadie, y además en un futuro podrás ampliar el motor a las 3D.

para iniciar el entorno


glViewport(0,0, AnchoVentana, AltoVentana);  // dimensiones del puerto de vista igual a la ventana
glMatrixMode(GL_PROJECTION);  
glLoadIdentity();    // se reinicia la matriz de proyeccion                          
glOrtho(0, AnchoVentana, 0, AltoVentana, -1.0, 1.0);  // se establece el volumen de trabajo
glMatrixMode(GL_MODELVIEW);   // se activa la matriz de modelo para trabajar con ella
glClearcolor(0,0,0);

para crear una textura.

glGenTextures( 1, piedra);  // generamos un nuevo identificador de tetura
glBindTexture(GL_TEXTURE_2D, piedra);   // activa la creacion de un nombre
glTexImage2D(GL_TEXTURE_2D, 0, 4,  256,256, 0, GL_RGBA, GL_UNSIGNED_BYTE, DatosTextura);
glEnable(GL_TEXTURE_2D);

para dibujar un triangulo coloreado

glBegin(GL_TRIANGLES); // dibujar triangulos
  glColor3ui(255, 0, 0);    glVertex2f (0.0f, 1.0f);
  glColor3ui(0, 255, 0);   glVertex2f (0.87f, -0.5f);  // y cada vertice.
  glColor3ui(0, 0, 255);   glVertex2f (-0.87f, -0.5f);
glEnd();

para dibujar un cuadrado con textura (sprite)

glBindTexture(GL_TEXTURE_2D, textura);
glBegin(GL_QUADS); // dibujar cuadrados
  glTexCoord2f(0.0, 0.0); glVertex2f(0.0, 0.0);  // se establece cada coordenada de textura
  glTexCoord2f(1.0, 0.0); glVertex2f(TamX,0.0);  // y cada vertice.
  glTexCoord2f(1.0, 1.0); glVertex2f(TamX,TamY);
  glTexCoord2f(0.0, 1.0); glVertex2f(0.0, TamY);
glEnd();

Para usar transparencia o mezclas de color con el fondo.

glEnable(GL_ALPHA_TEST);
glAlphaFunc(GL_NOTEQUAL, 0xFF);  // si el valor alpha no es igual a 0 el pixel pasa el test

glEnable(GL_BLEND); // se activa y luego se establece el tipo de mezcla que queramos
glBlendFunc(GL_DST_COLOR, GL_ONE); // (col Origen * col Destino) + (col Destino * 1)

Para rotar, desplazar y escalar

glRotatef(20, 0, 0, 1.0);   // rota el dibujo o sprite 20 grados
glTranslatef(100.0, 0, 0);  // Lo traslada 100 unidades en el eje de las x
glScalef(2.0, 2.0, 1.0);    // Lo Escala  x 2

Si no quieres complicarte de momento la vida con las matrices, reinicia la matriz antes de situar, rotar, escalar y dibujar cada sprite, asi.

glMatrixMode(GL_MODELVIEW); // seleccionamos la matriz de modelo
glLoadIdentity();           // la reiniciamos
glTranslatef(300.0, 260, 0);  // situamos el sprite
DibujarPersonaje();  

Y antes del render hay que borra el buffer de color y al final hay que intercambiarlo.

glClear(GL_COLOR_BUFFER_BIT); // borrar el buffer de color

// dibujos

glFlush();  // despachar comandos pendientes
SwapBuffers(hDC); // intercambiar buffer


Recuerda que si quieres desactivar algo tienes que usar glDisable
ej: glDisable(GL_BLEND);

Practica haciendo figuras con glBegin/glEnd, se pueden hacer puntos, lineas, triangulos, cuadrados, con GL_TRIANGLE_FAN  podras hacer circulos coloreados o sprites circulares, modificar sus vertices para hacer efectos tipo burbuja, o goma, bueno... la verdad es que cuando controles podras hacer lo que te de la gana y aún así siempre tendras cosas nuevas que aprender, te aseguro que nunca se te va a quedar pequeño.

También te recuerdo que tendrás que usar algunas funciones (pocas) que son diferentes para cada plataforma que no son estrictamente de OpenGL pero que son necesarias para poder usarlo en cada entorno, aunque si vas a usarlo junto a SDL Seguramente Azazel te pueda ayudar.

Quizás vas a encontrar muchos problemas hasta conseguir hacer lo que quieres en cada momento, pero si realmente te gusta esto disfrutarás resolviendolos (yo disfruto mucho cada vez que consigo que funcione algo).

suerte y hasta otra.

pelmazote

 1.- Es cierto que hay que pagar por el programa, pero como ocurre con blitz3d y blitzbasic estoy casi seguro que no hay que pagar licencia alguna para comercializar sus juegos, de ser así en su web no lo mencionan.

2.- ok, es lo último en lenguajes de programación de videojuegos.

3.-
CitarImposible, siendo un lenguaje interpretado como es no puede tener una velocidad similar a la de un lenguaje compilado como es C/C++ ni por asomo.

Pues solamente te invito a que te pases por los foros de blitzmax y hagas tu mismo la prueba, quedaras sorprendido:
Velocidad de blitzmax

CitarSDL + C++ te da mas libertad en cuanto a programacion y requiere mas trabajo de desarrollo que BlitZ Max o cualquier otro lenguaje de juegos que te da las cosas tan mascadas.

¿Te da más libertad?, dime una sola cosa que puedas hacer con las librerias de SDL que no puedas hacer con BlitzMax.

No compares BlitzMax con cualquier otro lenguaje de juegos ya que no te da nada mascado que no te lo de SDL o cualquier otra libreria. Realmente estoy arto de la gente que menosprecia estos lenguajes de programación y que se cree que si los utilizan son menos "hombres" ya que te facilitan el trabajo. Mira, el 99.9 de los que quieren hacer un juego y empiezan por hacer su propio motor gráfico, pues simplemente no llegan a acabar nada nunca. Para programar videojuegos hay que seguir una curva de aprendizaje, no se puede dividir antes de saber sumar.

Ya por último, das a entender que BlitzMax no vale nada y prentendes encastetarles Fenix????????????? por favor un poco de seriedad.

_XUTI_H_, yo solamente te recomiendo que te bajes la version de prueba de BlitzMax y no perdais el tiempo con SDL ya que en absoluto es la mejor opción para empezar a programar juegos.

Saludos.

Ray

 Está claro que si no tienes mucha idea y quieres hacer unos juegos concretos yo buscaría lo mas fácil y que me lo dieran todo mascado. Me quito un montón de quebraderos de cabeza y voy al grano sin tanta paranoia. Pero está claro que no voy a poder trabajar con nadie más, a no ser que también use ese motor o lenguaje  determinado. También tendré muchas lagunas porque como siempre me lo han dado todo hecho....

Pero si quieres aprender de verdad y te gusta, disfrutas solucionando los problemillas que van surgiendo, tienes paciencia y quieres dedicarte a ello en un futuro, hay que morder el polvo y pelearse con los punteros, el DirectX y sus versiones, los formatos, y la madre que los parió, claro... para eso te tiene que gustar mucho, porque si no es absolutamente imposible. Y tampoco hay que tener prisa por hacer el juego del siglo porque aprender es cuestión de años, y con tener unos conocimientos básicos de C ya se puede empezar por el buen camino aunque sea para hacer un juego de parchís en GDI.

Todos los sistemas son buenos, quizás la cuestión es preguntarse cada uno ¿que quiero hacer?, ¿para que lo quiero?, ¿que necesito?, ¿de donde vengo y a donde voy?, e informarse bien para no ir dando palos de ciego.

un saludo, y a ver que opina XUTI

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)

saludos

editado: incluso ahora con opengl tengo picos de 20 fps mas que con directx ;)

_XUTI_H_

 Buenasss.

Tampoco quiero pecar de "vanidoso", seguro que vosotros habeis hecho mil cosas más que yo y conoceis mucho más estos temas (por eso os pido opinión), pero tampoco es el primer juego que hago y supongo que un poco de idea tengo del tema.
El problema de los juegos (o demos, mejor dicho) que he realizado hasta ahora es que tienen un código bastante desordenado y lleno de parches, ahora mismo lo que nos interesa es crear codigo robusto y estructurado, preferiblemente en C++, y que podamos aprovechar para reutilizarlo en proyectos futuros. (si experiencia también nos hace falta mucha XD )

OpenGL lo he gastado muy poco, en prácticas de Informática Gráfica. Y sé que tengo mucho que aprender de esto, pero queria intentar sacarle el máximo provecho a las funciones de Blitting de la SDL como os dije antes. De todas maneras es una opción que me interesa mucho así que te agradezco mucho los apuntes sobre esto Ray, se lo plantaré a mi compañero y igual nos ponemos como lokos a reescribir funciones, jeje ;)

Bueno creo que ya queda dicho todo, pero lo de Blitz o Fenix me parecen buenas opciones para realizar pruebas o prototipos ràpidos. Hace tiempo usaba Div2 para hacer pruebas de los que más tarde pasaba a C.

Cuando decidamos que vamos a utilizar os comentamos (y preguntamos ;) ) más cosas.

Gracias a todos.

UTI

[EX3]

 
Citar1.- Es cierto que hay que pagar por el programa, pero como ocurre con blitz3d y blitzbasic estoy casi seguro que no hay que pagar licencia alguna para comercializar sus juegos, de ser así en su web no lo mencionan.
Si no pagas por el blitzmax o blitz3D no tienes derecho a comercializar tus juegos, si compras el programa ya estas pagando por el programa y por la licencia para poder comercializar tus juegos. Es de logica.

CitarPues solamente te invito a que te pases por los foros de blitzmax y hagas tu mismo la prueba, quedaras sorprendido: Velocidad de blitzmax
Que se que acerque por 3 o 4 segundos a C++ en unas pruebas sencillas de bucles e incrementos de variables no es nada del otro mundo. Que hagan Benchmarks con operaciones graficas utilizando las mismas librerias entre los dos lenguajes y entonces hablamos por que ahi es donde se vera la velocidad del lenguaje en cuanto a juegos, que los graficos es la parte que mas pesa en un juego y no una variable numerica que se incrementa. Que esto es asi, blitzmax con su varias capas de codigo e interfaces y que da como resultado un interprete de pseudo-codigo compilado no puede ser tan rapido como un lenguaje compilado.

Citar¿Te da más libertad?, dime una sola cosa que puedas hacer con las librerias de SDL que no puedas hacer con BlitzMax.
Un lenguaje que no este orientado a un campo especifico siempre te dara mas libertad que un lenguaje orientado a juegos.

CitarNo compares BlitzMax con cualquier otro lenguaje de juegos ya que no te da nada mascado que no te lo de SDL o cualquier otra libreria. Realmente estoy arto de la gente que menosprecia estos lenguajes de programación y que se cree que si los utilizan son menos "hombres" ya que te facilitan el trabajo. Mira, el 99.9 de los que quieren hacer un juego y empiezan por hacer su propio motor gráfico, pues simplemente no llegan a acabar nada nunca. Para programar videojuegos hay que seguir una curva de aprendizaje, no se puede dividir antes de saber sumar.
Menospreciar? Donde has visto que diga que BlitzMax o sus semejantes son una mierda que no valen para nada? Te has molestado en mirar en que lenguaje programo por ejemplo? Utilizo VB junto con mi libreria como si de un BlitzBasic se tratase y este si es un lenguaje menospreciado y limitado. No digas cosas que no son por que hasta yo en mi web o con gente que me pide consejo acabo recomendando lenguajes como BlitZMax o incluso, el que tu si que parece que desprecias, Fenix. No te inventes palabras donde no las hay. Si yo no estuviese embarcado en mi proyecto estaria programando en BlitZ3D o BlitZMax.

CitarMira, el 99.9 de los que quieren hacer un juego y empiezan por hacer su propio motor gráfico, pues simplemente no llegan a acabar nada nunca.
Date un paseo por paginas como esta y paginas de grupos de desarrollo y despues me cuentas de donde te sacas es 99.9 de proyectos fracasados, majo :P La mayoria de proyectos que no se terminan principalmente son por que sin tener experiencia ni recursos han tratado de llevar a cabo un proyecto de gran envergadura (el ejemplo mas popular, un MMORPG :P) y un proyecto asi en C++, Fenix, VB, BlitzMax o el lenguaje que se te ocurra nunca llegara a buen puerto si no se tiene los medios ni los conocimientos para llevarlo a cabo. Y es mas, ya que vuelves a confundir "lenguaje" con "motor", BlitzMaX te da las funciones para dibujar y demas facilidades, pero tendras que programar un motor para hacerte un juego o es que acaso BlitzMax genera motores automaticamente de la nada? :P

CitarYa por último, das a entender que BlitzMax no vale nada y prentendes encastetarles Fenix????????????? por favor un poco de seriedad.
El chaval buscaba algo gratuito para desarrollar un proyecto comercial y yo aconsejo una opcion gratuita, completa y que dia a dia sigue a adelante gracias a una comunidad como la que tiene atras. Pocos proyectos tan desinteresados vas a encontrar por ahi con un nivel semejante. Que no es mejor que BlitzMax? totalmente de acuerdo pero Fenix es una opcion tan valida como la que mas y gratuita. Y no recomiendo la dx_lib32 por tener que programar en VB6 si no iba haber tardado menos que TheAzazel en publicitar y recomendar mi libreria :P

Citar_XUTI_H_, yo solamente te recomiendo que te bajes la version de prueba de BlitzMax y no perdais el tiempo con SDL ya que en absoluto es la mejor opción para empezar a programar juegos.
Leyendo esto denotas no tener mucha idea de lo que hablas asi que prefiero dejar el tema por que no veo final a esta discursion.

Conclusion, si no quieres aprender a programar a bajo nivel (DirectX, OpenGL, SDL...) un lenguaje orientado a desarrollo de juegos es una opcion excelente ya que te lo da todo preparado para desarrollar el juego, ya sea BlitzBasic, BlitzMax, Fenix, PureBasic, PlayBasic o cualquier variante que encuentres por la red. Si lo que quieres es aprender a programar desde la raiz tu motor para tu juego, C++ y SDL, Allegro, OpenGL u DirectX.

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.