• Domingo 17 de Noviembre de 2024, 22:35

Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.


Mensajes - Ruben3d

Páginas: 1 ... 18 19 [20] 21 22 ... 30
476
La taberna del BIT / Re: Averiguar De La Vida Personal
« en: Sábado 12 de Junio de 2004, 19:48 »
Citar
yo con los calificativos iria un poco más alla

El que sólo ponga 'ladrones' de la SGAE es debido a la campaña para conseguir que cuando en Google se busque 'ladrones' el primer resultado sea la web de la SGAE.

Puedes ver esta y otras iniciativas aqui.

Un saludo.

Ruben3d

EDIT: He añadido links.

477
PDA / Re: Aplicación Evc Para Llamar A Través Modem
« en: Sábado 12 de Junio de 2004, 12:24 »
Hola

¿Te has acordado de linkar con la librería Wininet.lib?

Un saludo.

Ruben3d

478
Programación de Videojuegos / Re: Ping Pong
« en: Sábado 12 de Junio de 2004, 00:40 »
Citar
si tiene el compilador de java tan solo compilen el siguiente codigo y sustituyan el punto class

No tengo el SDK de Java instalado (y ando muy mal de espacio). Te agradecería que pusieras el .class.

Un saludo.

Ruben3d

479
Programación de Videojuegos / Re: El Gato Cheko - Versión 2.0.0
« en: Viernes 11 de Junio de 2004, 22:46 »
Hola.

He estado probandolo y está muy bien. Me recuerda a las aventuras de texto que había en el Spectrum (Don quijote y demás), aunque ésta no tiene imágenes hechas con líneas y círculos. Me pregunto, ¿cómo haces cada estancia? ¿Usas algún script que va incluido como recurso en el .exe, o está codificado a pelo?

Un saludo.

Ruben3d

480
Programación de Videojuegos / Re: Pasar Una Imagen A Escala De Grises
« en: Viernes 11 de Junio de 2004, 22:35 »
Hola.

¡Muchas gracias por tus propuestas! He probado la primera, por ser la única que carece de multiplicaciones. Los resultados, en cuanto a velocidad, son muy buenos. El único inconveniente es que el azul adquiere tanta luz como el rojo, aunque la luminosidad del blanco es muy buena, pues no pierde intensidad, y se aprecian tonos oscuros que antes no aparecían.

No sé cuál de las dos utilizar, tu opción es más rápida y no se oscurece, pero la mia mantiene la intensidad de cada componente de color. Cuando escriba el código del gestor de texturas lo probaré sobre imágenes reales a ver qué resultados da cada técnica. De momento he compuesto una imagen a modo comparativo, con los colores sin aplicar ningún filtro, con mi versión de escala de grises y con la tuya (al final del post).

Un saludo.

Ruben3d

Nota: La imagen está en formato PNG. Internet Explorer no trata bien los PNG y no tiene en cuenta la correción gamma de la imagen, por lo que podría aparecer más oscura de lo que en verdad es. Mejor abrirla con algún programa de dibujo (la he creado con Gimp2).


EDIT: No he guardado el gamma de la imagen y debería verse bien (me da esta opción la última versión del Gimp :D)

481
La taberna del BIT / Re: Averiguar De La Vida Personal
« en: Viernes 11 de Junio de 2004, 17:55 »
Hola!

Bueno, yo no voy a ser menos y también voy a participar :lol:. Mi nombre es Rubén (sorpresa!) y tengo 21 años. Actualmente estoy estudiando tercero de Ingeniería Informática en la Universidad de Alcalá de Henares (en España).

Respecto a mis gustos, diré que para mi el mejor juego de todos los tiempos es Doom, y los que menos soporto: Tetris y Pang (este lo odio, no sé el porqué). Música me gusta casi toda. Tengo canciones de todo género, época y siglo, excepto rap, punk y derivados de éstos (lo siento Blag :whistling:).

Mis hobbies con el ordenador comprenden la programación (si está relacionada con gráficos mejor que mejor), la infografía y jugar a Doom (bueno, también juego a algunos otros juegos, pero tengo 10 source ports de Doom diferentes en disco, y los uso todos!). Respecto a los hobbies del mundo real, lo mejor es salir con los amigos los fines de semana, y ver películas en cines decentes (no los que tengo en esta ciudad).
Citar
Trago Favorito: Johnnie Walker Etiqueta Negra.
Con cocacola :D.

Así nos conocemos mejor entre nosotros.

Un saludo a todos!

Ruben3d

482
Programación de Videojuegos / Pasar Una Imagen A Escala De Grises
« en: Viernes 11 de Junio de 2004, 14:49 »
Hola.

He realizado una función para pasar imágenes a escala de grises que es lo suficientemente rápida para ser usada en tiempo real. La he probado en un emulador de PocketPC con un display de 240x320 y supera los 100 fps en un ordenador a 1.5GHz con varios trabajos en segundo plano (entre ellos el seti@home). No sé a qué velocidad funcionará ejecutandose nativamente en un PC, pero supongo que será viable a 640x480 en una máquina equivalente.

Para pasar a escala de grises tengo que obtener la luminosidad de cada píxel, multiplicando cada componente de color por un peso y redondeando a un número entero el resultado, de esta manera:
Código: Text
  1. gris = (unsigned char) (0.30*ROJO(pixel) + 0.59*VERDE(pixel) + 0.11*AZUL(pixel));
  2.  
Esto implica tres multiplicaciones de números flotantes por píxel, dos sumas y un redondeo. Estuve meditando y me di cuenta de que podía hacerse sólo con números enteros, que sería más rápido:
Código: Text
  1. gris = (unsigned char) (30*ROJO(pixel) + 59*VERDE(pixel) + 11*AZUL(pixel))/100;
  2.  
Esto elimina el uso de los números flotantes, pero añade una división entera, así que no me convenció. Pensé en usar sólo desplazamientos de bits, aunque de esta manera se pierde exactitud:
Código: Text
  1. gris = ((ROJO(pixel)<<1) + (VERDE(pixel)<<2) + AZUL(pixel))/7;
  2.  
De esta manera, el peso del rojo sería 0.28, el del verde 0.57 y el del azul 0.14. No son iguales a los originales, pero es una aproximación bastante buena. Aún me quedaba solucionar la división. Es fácila darse cuenta de que 7 está muy próximo a 8, que se arregla con un desplazamiento de bits:
Código: Text
  1. gris = ((ROJO(pixel)<<1) + (VERDE(pixel)<<2) + AZUL(pixel))>>3;
  2.  
De esta manera, paso un píxel a escala de grises y sólo realizo desplazamientos de bits y sumas de enteros. Sin embargo, he de pagar el precio de un leve oscurecimiento de la imagen final, causado por dividir entre 8 en vez de entre 7.

Os dejo aqui la función acabada, por si a alguien le parece útil:
Código: Text
  1. void io3d::CGraphics2D::grayscaleArea(int x1, int y1, int x2, int y2)
  2. {
  3.   if (x1>x2)
  4.   {
  5.     switchElems<int>(x1,x2);
  6.   }
  7.   if (y1>y2)
  8.   {
  9.     switchElems<int>(y1,y2);
  10.   }
  11.  
  12.   unsigned char c;
  13.  
  14.   int next_line = -(x2-x1+1)+m_nNormYPitch;
  15.  
  16.   WORD *pPixel = &m_pBackBuffer[x1+y1*m_nNormYPitch];
  17.  
  18.   for (int y=y1; y<=y2; y++)
  19.   {
  20.     for (int x=x1; x<=x2; x++)
  21.     {
  22.       // Los pesos son 0.30, 0.59 y 0.11, pero realizo una aproximación
  23.       // Multiplico por 2, 4 y 1. Va incluido en el despl. el bajar G a 5 bits
  24.       // Debería dividir por 7, pero hacerlo por 8 es mucho más rápido (aunque se
  25.       // oscurece un poco la imagen).
  26.       c = ( (CR5(*pPixel)<<1) + (CG6(*pPixel)<<1) + CB5(*pPixel) ) >> 3;
  27.       *(pPixel++) = C565(c,c<<1,c);
  28.     }
  29.  
  30.     // Reajuste para la siguiente línea
  31.     pPixel += next_line;
  32.   }
  33. }
  34.  

La función está pensada para poder ser aplicada a áreas rectangulares arbitrarias. Para que se aplique a la pantalla completa hay que usar como parámetros (0,0, anchura-1, altura-1). Esta función asume que hay un puntero llamado m_pBackBuffer, que apunta a la memoria en donde se pinta y es de tipo WORD*, pues trabaja en modo de 16 bits de color. Las macros CR5, CG6 y CB5 extraen cada componente de color del píxel de tipo WORD con desplazamientos y máscaras, y lo devuelven en el rango [0,31] para el rojo y el azul y en el rango [0,63] para el verde (por tener un bit más). En m_nNormYPitch se guarda cuánto hay que sumarle al puntero que apunta a un píxel para avanzar a la siguiente fila. C565 es una macro que recibe las tres componentes de color en los rangos citados anteriormente y los compacta en un WORD. Por último, hay que tener en cuenta en todo momento que el verde ocupa un bit más y por eso hay que realizar algunos desplazamientos no esperados.

Espero que esto os sirva. Se me ocurren diversas aplicaciones, como hacer que detrás de una pantalla en un escenario de un juego de plataformas se vea en escala de grises (algo así creo que vi en Jazz Jackrabbit, de Apogee?), o cualquier otro efecto (para escenas cinemáticas, junto a ruido añadido para dar impresión de película antigua).

Un saludo.

Ruben3d

483
C/C++ / Re: Conjunto Potencia
« en: Jueves 10 de Junio de 2004, 19:57 »
Hola.

¿Qué es un conjunto potencia?

Un saludo.

Ruben3d

484
Programación de Videojuegos / Re: Ping Pong
« en: Jueves 10 de Junio de 2004, 19:51 »
Me aparece esto en la consola de Java:
Código: Text
  1. cargar: bola.class no es público o no tiene ningún constructor público.
  2.  
  3. java.lang.IllegalAccessException: Class sun.applet.AppletPanel can not access a member of class bola with modifiers ""
  4.  
  5.   at sun.reflect.Reflection.ensureMemberAccess(Unknown Source)
  6.  
  7.   at java.lang.Class.newInstance0(Unknown Source)
  8.  
  9.   at java.lang.Class.newInstance(Unknown Source)
  10.  
  11.   at sun.applet.AppletPanel.createApplet(Unknown Source)
  12.  
  13.   at sun.plugin.AppletViewer.createApplet(Unknown Source)
  14.  
  15.   at sun.applet.AppletPanel.runLoader(Unknown Source)
  16.  
  17.   at sun.applet.AppletPanel.run(Unknown Source)
  18.  
  19.   at java.lang.Thread.run(Unknown Source)
  20.  
  21.  
  22.  
y esto en la barra de estado del explorador:
Código: Text
  1. Ha fallado la carga del applet de Java...
  2.  

Un saludo.

Ruben3d

EDIT: Por favor, no escribas en rojo  :blink:

485
Programación de Videojuegos / Re: Videojuegos 2D
« en: Jueves 10 de Junio de 2004, 19:47 »
Hola.

Tienes toda la razón. Yo aún sigo jugando a juegos bastante antiguos. De todas formas el tema original es:
Citar
los videojuegos 2d aun tienen una ventana comercial?, vale la pena hacer videojuego 2d?
Por muy divertidos que sean, para ordenador no venden (aunque ahora estén surgiendo para dispositivos portátiles), ya que la gente (refiriendome a 'gente' como a la masa de compradores de juegos que no saben de PC más que encenderlo y jugar) si no ve gráficos 3D rechaza el juego (y mira que el Counter Strike se me hizo ya cansado hace mucho y la gente lo juega como el primer día).

Un saludo.

Ruben3d

486
Sobre los Foros de SoloCodigo / Re: Validacion De Datos
« en: Miércoles 9 de Junio de 2004, 21:59 »
Registrate y pregunta en el foro adecuado.

Un saludo.

Ruben3d

487
OpenGL / Re: Opengl
« en: Miércoles 9 de Junio de 2004, 21:42 »
Hola.

Bueno, yo uso Visual Studio y sí trae la librería glaux. En Borland no sé cómo es que no viene.

Puedes probar cargando un TGA, que está bastante bien explicado aqui (y tiene un formato sencillo):
Busca 'Texture Mapping Part4 (TGA)'
o puedes descargarte el tutorial de Nehe portado a Borland
Borland C++ Builder 6 Code For This Lesson.

Un saludo.

Ruben3d

488
C/C++ / Re: Curiosidad Con Turbo C++
« en: Miércoles 9 de Junio de 2004, 21:04 »
Citar
entonces mi conclusion es que Windows es muuuuuucho mas lento que ms-dos,

Piensa que esté en ventana o en pantalla completa lo sigues ejecutando en Windows. El que tarde más en ventana es debido a que estás en modo gráfico y se ha de mantener todo el resto del escritorio, además de simular el comportamiento de la consola en su ventana (que lo normal es que se ejecute en modo texto).

Citar
no se si con esto le estoy creando un bucle infinito al pc, xk kon el mio se a estao unos 5 minutos y ahun no havia terminao

Si no imprimieras por pantalla sería sólo un instante. Para imprimir por pantalla cada carácter el programa realiza una interrupción software (trap) para pedir al sistema operativo que le pinte un carácter. Esto conlleva saltar a modo protegido, guardar en la pila el contador de programa, los registros y la palabra de estado, ejecutar la rutina de atención de la interrupción y, si estás en Windows (o cualquier otro SO multitarea), ejecutar el planificador (scheduler) para ver si encima te quita el procesador para darselo a otro proceso con más prioridad, y esperar de nuevo a que te toque, con los cambios de contexto que todo esto ha implicado. Como ves, suceden muchas cosas cada vez que imprimes un carácter.

Un saludo.

Ruben3d

489
C/C++ / Re: Programar En C Sobre Linux
« en: Miércoles 9 de Junio de 2004, 20:43 »
Hola

Para desarrollar en Linux una aplicación pequeña uso un editor de texto, como KWrite ó Kate, y creo los makefiles a mano. Si la cosa se complica uso el KDevelop, que va por su tercera versión y está bastante bien. También está el JEdit, pero hay que configurarlo con plugins para que sirva para C y yo sólo lo uso como editor de HTML.

Un saludo.

Ruben3d

490
OpenGL / Re: Opengl
« en: Miércoles 9 de Junio de 2004, 20:34 »
Hola.

En este tutorial te explican cómo abrir un BMP y usarlo como textura:
Lesson 6: Texture Mapping

Un saludo.

Ruben3d

491
Visual C++ / Re: Ayuda MSDN library en castellano ???
« en: Miércoles 9 de Junio de 2004, 19:20 »
Fijate en la fecha del post
Citar
31/08/2002

¡Le has respondido con casi dos años de diferencia! (más vale tarde que nunca)

Un saludo.

Ruben3d

492
Sobre los Foros de SoloCodigo / Re: Todas Actualizaciones De Windows Xp
« en: Miércoles 9 de Junio de 2004, 19:16 »

493
C/C++ / Re: Sonido En C
« en: Miércoles 9 de Junio de 2004, 14:58 »
PlaySound()

Un saludo.

Ruben3d

494
Novedades en SoloCodigo / Re: Nuevo Foro-chat
« en: Miércoles 9 de Junio de 2004, 14:47 »
Hola.

Me parece muy buena idea, ya que todos los foros suelen tener algún sitio para hablar de cualquier tema.

Un saludo.

Ruben3d

495
C/C++ / Re: Sonido En C
« en: Martes 8 de Junio de 2004, 22:25 »
Hola.

Si programas en Windows este artículo te ayudará:
Playing multiple wave files continuously and simultaneously

Está escrito para PocketPC pero es igualmente aplicacable a un ordenador normal. Está pensado para usar sólo la API de Windows y no estar limitado por la funcionalidad de PlaySound(), que no puede reproducir varios WAV simultáneamente (aunque si sólo quieres reproducir un sonido estilo evento de Windows, PlaySound() está muy bien).

Un saludo.

Ruben3d

496
PDA / Re: Error En Ejecutable En Visaul C++ Embedded
« en: Martes 8 de Junio de 2004, 18:21 »
Hola.

En mi ordenador tengo el eMbedded Visual C++ 4.0, con el Service Pack 3 instalado (para desarrollar para WinCE 4.1 y 4.2), SDK para Windows CE y el SDK de PocketPC 2003 (Windows Mobile 2003). Con todo esto no me aparece tu procesador (supongo que será de PocketPC 2002 :().

Para Windows Mobile 2003 tengo:
  • WCE ARMV4</li>
  • WCE emulator</li>
y para Windows CE 4.x tengo:
  • WCE ARMV4</li>
  • WCE ARMV4I</li>
  • WCE MIPSII</li>
  • WCE MIPSII_FP</li>
  • WCE MIPSIV</li>
  • WCE MIPSIV_FP</li>
  • WCE SH3</li>
  • WCE SH4</li>
  • WCE emulator</li>
  • WCE x86</li>
Prueba a compilarlo en el disco duro y transferirlo a mano. O prueba con una versión más moderna del entorno, crea un nuevo proyecto e importa todos los ficheros fuente (así hice funcionar un proyecto de PPC2002 en el emulador de 2003). De todas formas, aún no he probado con ningún PocketPC real (a ver si algún día tengo uno) y de momento sólo uso el emulador.

Un saludo.

Ruben3d

EDIT: Mira a ver si puedes contactar con la persona que inició el proyecto.

497
C/C++ / Re: Funcion Para Devolver La Fecha
« en: Martes 8 de Junio de 2004, 11:33 »
Hola.

Código: Text
  1. #include &#60;windows.h&#62;
  2.  
  3. ...
  4.  
  5. SYSTEMTIME st;
  6. GetLocalTime(&st);
  7. printf(&#34;%02d/%02d/%04d %02d:%02d:%02d&#34;, st.wDay, st.wMonth, st.wYear, st.wHour, st.wMinute, st.wSecond);
  8.  
  9.  

Un saludo.

Ruben3d

498
Programación de Videojuegos / Re: Erosion Binaria De Un Mapa De Bits
« en: Lunes 7 de Junio de 2004, 22:18 »
Hola.

Hace unos días también implementé una función que manipulaba una imagen (realiza un blur). Inicialmente la realicé refiriendome a cada pixel con un método getPixel y otro putPixel que básicamente hacían lo que tú: multiplicaciones de enteros para situarse en los diferentes píxeles de la imagen (con los índices entre corchetes []). De este manera me funcionaba a 35-37 fps a 240x320.

A continuación lo que hice fue mantener mis dos bucles anidados para moverme por la imagen pero, en vez de usar los contadores, iba sumando +1 a un puntero que inicialmente inicialicé con la dirección del primer píxel. De esta manera puedo recorrer la pantalla sin multiplicar en ningún punto. Para saber el valor del píxel de arriba o de abajo calculé cuánto debía sumar o restar al puntero para subir o bajar un píxel. De esta forma subí a 160-170 fps con una imagen del mismo tamaño. Para que lo veas más claro (porque no sé si me he explicado claro, que estoy espeso) te pongo el código del que hablo:

Antes de optimizar
Código: Text
  1.   int _x;
  2.   int x_;
  3.   int _y;
  4.   int y_;
  5.   int r;
  6.   int g;
  7.   int b;
  8.  
  9.   for (int y=1; y&#60;io3dCore.getDisplay().getHeight()-2; y++)
  10.   {
  11.     int x;
  12.  
  13.     // caso de x=0
  14.     _x = g2d.getPixel(0, y);
  15.     x_ = g2d.getPixel(0+1, y);
  16.     _y = g2d.getPixel(0, y-1);
  17.     y_ = g2d.getPixel(0, y+1);
  18.     r = (CR5(_x)+CR5(x_)+CR5(_y)+CR5(y_))&#62;&#62;2;
  19.     g = (CG6(_x)+CG6(x_)+CG6(_y)+CG6(y_))&#62;&#62;2;
  20.     b = (CB5(_x)+CB5(x_)+CB5(_y)+CB5(y_))&#62;&#62;2;
  21.     g2d.putPixel(0,y, C565(r,g&0xFFFE,b));
  22.  
  23.     for (x=1; x&#60;io3dCore.getDisplay().getWidth()-2; x++)
  24.     {
  25.       _x = g2d.getPixel(x-1, y);
  26.       x_ = g2d.getPixel(x+1, y);
  27.       _y = g2d.getPixel(x, y-1);
  28.       y_ = g2d.getPixel(x, y+1);
  29.       r = (CR5(_x)+CR5(x_)+CR5(_y)+CR5(y_))&#62;&#62;2;
  30.       g = (CG6(_x)+CG6(x_)+CG6(_y)+CG6(y_))&#62;&#62;2;
  31.       b = (CB5(_x)+CB5(x_)+CB5(_y)+CB5(y_))&#62;&#62;2;
  32.       g2d.putPixel(x,y, C565(r,g&0xFFFE,b));
  33.     }
  34.  
  35.     // caso de x=width-1
  36.     x = io3dCore.getDisplay().getWidth()-2;
  37.     _x = g2d.getPixel(x-1, y);
  38.     x_ = g2d.getPixel(x, y);
  39.     _y = g2d.getPixel(x, y-1);
  40.     y_ = g2d.getPixel(x, y+1);
  41.     r = (CR5(_x)+CR5(x_)+CR5(_y)+CR5(y_))&#62;&#62;2;
  42.     g = (CG6(_x)+CG6(x_)+CG6(_y)+CG6(y_))&#62;&#62;2;
  43.     b = (CB5(_x)+CB5(x_)+CB5(_y)+CB5(y_))&#62;&#62;2;
  44.     g2d.putPixel(x,y, C565(r,g&0xFFFE,b));
  45.   }
  46.  
  47.  

Tiene algunas diferencias (y algún bug) con respecto a la optimizada, ya que la generalicé para rectángulos de tamaño arbitrario. haz caso al bucle central, ya que trato por separado los casos de los extremos.

Ahora la versión optimizada. Es un poco más larga, pero si te fijas en todo el código sólo hay una multiplicación (y no está en ningún bucle). Es tan larga porque trato las esquinas y los bordes por separado, pero fijate en el bucle más central (el que tiene el comentario '//centro').

Versión optimizada
Código: Text
  1. void io3d::CGraphics2D::blurArea(int x1, int y1, int x2, int y2)
  2. {
  3.   if (x1&#62;x2)
  4.   {
  5.     switchElems&#60;int&#62;(x1,x2);
  6.     switchElems&#60;int&#62;(y1,y2);
  7.   }
  8.   if (y1&#62;y2)
  9.   {
  10.     switchElems&#60;int&#62;(y1,y2);
  11.   }
  12.  
  13.   int _x;  // Píxel de la izquierda
  14.   int x_;  // Píxel de la derecha
  15.   int _y;  // Píxel de arriba
  16.   int y_;  // Píxel de abajo
  17.   int r;
  18.   int g;
  19.   int b;
  20.  
  21.   int next_line = -(x2-x1+1)+m_nNormYPitch;
  22.  
  23.   int x;
  24.   WORD *pPixel = &m_pBackBuffer[x1+y1*m_nNormYPitch];
  25.  
  26.   // Esquina superior izq.
  27.   _x = *pPixel;
  28.   x_ = *(pPixel+1);
  29.   _y = *(pPixel+1+m_nNormYPitch); // En diagonal abajo-dcha.
  30.   y_ = *(pPixel+m_nNormYPitch);
  31.   r = (CR5(_x)+CR5(x_)+CR5(_y)+CR5(y_))&#62;&#62;2;
  32.   g = (CG6(_x)+CG6(x_)+CG6(_y)+CG6(y_))&#62;&#62;2;
  33.   b = (CB5(_x)+CB5(x_)+CB5(_y)+CB5(y_))&#62;&#62;2;
  34.   *(pPixel++) = C565(r,g&0xFFFE,b);
  35.  
  36.   // Centro primera fila
  37.   for (x=x1+1; x&#60;x2; x++)
  38.   {
  39.     _x = *(pPixel-1);
  40.     x_ = *(pPixel+1);
  41.     _y = *pPixel;
  42.     y_ = *(pPixel+m_nNormYPitch);
  43.     r = (CR5(_x)+CR5(x_)+CR5(_y)+CR5(y_))&#62;&#62;2;
  44.     g = (CG6(_x)+CG6(x_)+CG6(_y)+CG6(y_))&#62;&#62;2;
  45.     b = (CB5(_x)+CB5(x_)+CB5(_y)+CB5(y_))&#62;&#62;2;
  46.     *(pPixel++) = C565(r,g&0xFFFE,b);
  47.   }
  48.  
  49.   // Esquina superior dcha.
  50.   _x = *(pPixel-1);
  51.   x_ = *pPixel;
  52.   _y = *(pPixel-m_nNormYPitch);
  53.   y_ = *(pPixel-1+m_nNormYPitch); // En diagonal abajo-izq.
  54.   r = (CR5(_x)+CR5(x_)+CR5(_y)+CR5(y_))&#62;&#62;2;
  55.   g = (CG6(_x)+CG6(x_)+CG6(_y)+CG6(y_))&#62;&#62;2;
  56.   b = (CB5(_x)+CB5(x_)+CB5(_y)+CB5(y_))&#62;&#62;2;
  57.   *(pPixel++) = C565(r,g&0xFFFE,b);
  58.  
  59.   // Parte central
  60.   for (int y=y1+1; y&#60;y2; y++)
  61.   {
  62.     // Reajuste para la siguiente línea
  63.     pPixel += next_line;
  64.  
  65.     // caso de x=x1
  66.     _x = *pPixel;
  67.     x_ = *(pPixel+1);
  68.     _y = *(pPixel-m_nNormYPitch);
  69.     y_ = *(pPixel+m_nNormYPitch);
  70.     r = (CR5(_x)+CR5(x_)+CR5(_y)+CR5(y_))&#62;&#62;2;
  71.     g = (CG6(_x)+CG6(x_)+CG6(_y)+CG6(y_))&#62;&#62;2;
  72.     b = (CB5(_x)+CB5(x_)+CB5(_y)+CB5(y_))&#62;&#62;2;
  73.     (*pPixel++) = C565(r,g&0xFFFE,b);
  74.  
  75.     // Centro
  76.     for (int x=x1+1; x&#60;x2; x++)
  77.     {
  78.       _x = *(pPixel-1);
  79.       x_ = *(pPixel+1);
  80.       _y = *(pPixel-m_nNormYPitch);
  81.       y_ = *(pPixel+m_nNormYPitch);
  82.       r = (CR5(_x)+CR5(x_)+CR5(_y)+CR5(y_))&#62;&#62;2;
  83.       g = (CG6(_x)+CG6(x_)+CG6(_y)+CG6(y_))&#62;&#62;2;
  84.       b = (CB5(_x)+CB5(x_)+CB5(_y)+CB5(y_))&#62;&#62;2;
  85.       *(pPixel++) = C565(r,g&0xFFFE,b);      // Optimizará cambiar 0xFFFE por 0xFE ?
  86.     }
  87.  
  88.     // caso de x=x2
  89.     _x = *(pPixel-1);
  90.     x_ = *pPixel;
  91.     _y = *(pPixel-m_nNormYPitch);
  92.     y_ = *(pPixel+m_nNormYPitch);
  93.     r = (CR5(_x)+CR5(x_)+CR5(_y)+CR5(y_))&#62;&#62;2;
  94.     g = (CG6(_x)+CG6(x_)+CG6(_y)+CG6(y_))&#62;&#62;2;
  95.     b = (CB5(_x)+CB5(x_)+CB5(_y)+CB5(y_))&#62;&#62;2;
  96.     *(pPixel++) = C565(r,g&0xFFFE,b);
  97.   }
  98.  
  99.   // Reajuste para la siguiente línea
  100.   pPixel += next_line;
  101.  
  102.   // Esquina inferior izq.
  103.   _x = *pPixel;
  104.   x_ = *(pPixel+1);
  105.   _y = *(pPixel-m_nNormYPitch);
  106.   y_ = *(pPixel+1-m_nNormYPitch);  // En diagonal arriba-dcha
  107.   r = (CR5(_x)+CR5(x_)+CR5(_y)+CR5(y_))&#62;&#62;2;
  108.   g = (CG6(_x)+CG6(x_)+CG6(_y)+CG6(y_))&#62;&#62;2;
  109.   b = (CB5(_x)+CB5(x_)+CB5(_y)+CB5(y_))&#62;&#62;2;
  110.   *(pPixel++) = C565(r,g&0xFFFE,b);
  111.  
  112.   // Centro última fila
  113.   for (x=x1+1; x&#60;x2; x++)
  114.   {
  115.     _x = *(pPixel-1);
  116.     x_ = *(pPixel+1);
  117.     _y = *(pPixel-m_nNormYPitch);
  118.     y_ = *pPixel;
  119.     r = (CR5(_x)+CR5(x_)+CR5(_y)+CR5(y_))&#62;&#62;2;
  120.     g = (CG6(_x)+CG6(x_)+CG6(_y)+CG6(y_))&#62;&#62;2;
  121.     b = (CB5(_x)+CB5(x_)+CB5(_y)+CB5(y_))&#62;&#62;2;
  122.     *(pPixel++) = C565(r,g&0xFFFE,b);
  123.   }
  124.  
  125.   // Esquina inferior dcha.
  126.   _x = *(pPixel-1);
  127.   x_ = *pPixel;
  128.   _y = *(pPixel-m_nNormYPitch);
  129.   y_ = *(pPixel-1-m_nNormYPitch); // En diagonal arriba-izq.
  130.   r = (CR5(_x)+CR5(x_)+CR5(_y)+CR5(y_))&#62;&#62;2;
  131.   g = (CG6(_x)+CG6(x_)+CG6(_y)+CG6(y_))&#62;&#62;2;
  132.   b = (CB5(_x)+CB5(x_)+CB5(_y)+CB5(y_))&#62;&#62;2;
  133.   *(pPixel++) = C565(r,g&0xFFFE,b);
  134. }
  135.  

Espero que con todo esto veas lo que te estoy tratando de decir. Si tienes alguna duda pregunta por aqui.

Un saludo.

Ruben3d

499
Programación de Videojuegos / Re: Fantasia Mitologica Colombiana
« en: Domingo 6 de Junio de 2004, 23:30 »
Gracias, probaré a ver (ya no recordaba lo que salía durante el proceso de instalación).

Un saludo.

Ruben3d

500
Allegro / Re: Alpha Blending Más Rápido:"fblend"
« en: Domingo 6 de Junio de 2004, 22:47 »
Hola.

A riesgo de equivocarme (pues no conozco Allegro), creo que se podría aplicar este método:
Really Fast Software Blending

Un saludo.

Ruben3d

Páginas: 1 ... 18 19 [20] 21 22 ... 30