Resultados 1 al 10 de 10

Tema: Iconos en movimiento?

  1. #1 Iconos en movimiento? 
    Medio
    Fecha de ingreso
    Oct 2005
    Mensajes
    82
    Descargas
    0
    Uploads
    0
    Alguien de casualidad sabe como poner los iconos en movimiento? algo asi como figuras en 3D moviendose? gracias de antemano
    th3 h4k3m4t3...ch4p1n HaStA La ViCtOrIa SiEmPrE
    Citar  
     

  2. #2  
    Avanzado
    Fecha de ingreso
    Jun 2006
    Mensajes
    1.461
    Descargas
    15
    Uploads
    0
    No creo que se pueda, eso sería actualizar el iconcache al menos 10 veces por segundo... no apto para enfermos del corazón
    Citar  
     

  3. #3  
    Moderador Global
    Fecha de ingreso
    Aug 2005
    Mensajes
    6.279
    Descargas
    7
    Uploads
    0
    ABODUJANA demostró que sí se podía
    http://www.xs4all.nl/~jvdkuyp/flash/see.htm

    Salu2


    Keep on Rollin'

    . . . . . . . . . . . . . . . . . . . .
    [[ NORMAS DEL FORO ]]
    . . . . . . . . . . . . . . . . . . . .
    __________
    Citar  
     

  4. #4  
    Avanzado
    Fecha de ingreso
    Jun 2006
    Mensajes
    1.461
    Descargas
    15
    Uploads
    0
    ¡Coño, qué guapo! No sabía que se podían desviar así los temas de conversación...
    Citar  
     

  5. #5  
    Moderador Global Avatar de hystd
    Fecha de ingreso
    Jul 2005
    Ubicación
    1, 11, 21, 1211...
    Mensajes
    1.596
    Descargas
    58
    Uploads
    0
    Hola buenas! Se me ocurre una manera, eso sí un poco laboriosa, y no sé hasta que punto de chapucera o profesional xD. Estos son los pasos que seguiría:

    1. Obtener la dimensión de la pantalla (resolución). Número de pixeles en horizontal y vertical. Esto se puede realizar mediante dos llamadas a la función contenida en user32.dll: GetSystemMetrics(SM_CXSCREEN) y GetSystemMetrics(SM_CYSCREEN), que nos devuelve respectivamente la anchura y altura respectivamente.

    2. Establecemos un sistema de referencia, por ejemplo en el centro de la pantalla. Esto nos servirá para más adelante poder aplicar los efectos que queramos a los objetos deseados (iconos en este caso), sobre todo efectos del tipo "rotar", "estirar", "trasladar", "shear", etc... por la pantalla.

    3. Buscamos los iconos, para ello podemos hacerlo de muchas maneras; recorremos cada pixel de la pantalla, comparando el pixel por el que vamos con el de fondo, si son distintos quiere decir que hemos encontrado un objeto. Para hacerlo así podemos usar la función GetPixel(x, y) de gdi32.dll.

    El inconveniente de hacerlo así es que no podemos tener un fondo irregular (una imagen como fondo), ya que entonces no encontraríamos los objetos adecuadamente, y la eficiencia, ya que recorrer 800x600 o 1024x768 pixeles no es trivial, por ello podríamos implementarlo con algoritmos más efecientes, por ejemplo línea a línea de arriba a abajo, almacenando la información de la línea en un bufer. Eso ya es cuestión de cada uno.

    4. Una vez "descubierto" que hemos encontrado un objeto (icono), almacenamos los pixeles correspondientes a dicho icono directamente en un array bidimensional de tamaño el mismo que el tamaño del icono (esta información se puede encontrar en la configuración de Windows). Este array nos servirá para aplicar los efectos sobre él y luego actualizarlo en la pantalla.
    El array bidimensional debe ser de un tipo de datos llamado TRGBTriple, que no es más que un paquete de datos que contiene tres campos de tamaño 1 Byte cada uno. (24 bits), para almacenar la información correspondiente a los 3 colores primarios de la luz: azul, rojo y verde. Modificando estos colores, se obtienen efectos del tipo: "contraste", "brillo", "saturación", etc...

    Si la obtención del icono la hacemos con getPixel, debemos hacer la pertinente conversión a este tipo de datos, dependiendo de si los efectos los vamos a implementar nosotros, o si vamos a utilizar alguna API ya implementada, por ejemplo OpenGL (para este caso no haría falta hacer conversión).

    5. Ahora viene lo interesante, decidimos que efecto vamos a darle al icono. Si decidiste usar OpenGL o cualquier otra librería, busca documentación sobre su API. Aplicamos el efecto, y actualizamos la región correspondiente al icono por el que vamos mediante "SetPixel" de gdi32.dll.

    Si prefieres realizar el efecto tu, entonces continúa leyendo y te aconsejo que leas manuales sobre tecnicas matemáticas de la informática gráfica

    Los efectos para dar la sensación de 3D y rendering, se consiguen aplicando sombras y haciendo unas operaciones polinomiales.

    Voy a poner un ejemplo de efecto, para ver cómo se implementaría, que será rotar el icono 45º en sentido horario, y aplicarle sombras como si tuvieramos un foco de luz dando de arriba a abajo.

    I) Tenemos nuestro icono en el array bidimensional del tipo TRGBTriple. Primero lo rotaremos 45º en sentido horario, para ello ponemos un sistema de referencia en el centro del icono. A cada pixel (x,y) del icono lo multiplicamos por una matriz 2x2, cuyos elementos son (A11=cos45, A12=-sen45, A21=sen45, A22=cos45), el resultado de multiplicar esta mátriz por el pixel (X,Y) nos da una matriz 1x2 correspondiente al pixel rotado (xrot, yrot). con la posición de las nuevas coordenadas ya rotadas (lo único que se hace es intercambiar elementos en posiciones distintas del array bidimensional. Una vez rotados todos los pixeles del icono, procedemos a darle brillos y sombras.

    II) Teniendo el array rotado, queremos un foco de luz en la parte superior, para ello basta con incrementar cada campo del TRGBTriple unas unidades (aumentamos el rojo, verde y azul por igual), y a medida que avanzamos recorriendo el array de arriba a abajo vamos decrementando estos valores y cada vez será más oscuro. Si fuera por ejemplo un foco de luz roja, pues el incremente y decremento del campo correspondiente al rojo del TRGBTriple será mayor. jejeje eso ya es cuestión de gustos.

    Espero no haberme excedido con la explicación, y si puedo haré una pequeña aplicación (por ejemplo en 2º plano), que lo realice, no obstante, es evidente que utilizando librerías ya hechas como OpenGL o Directx se obtienen resultados muy buenos y te ahorras mucho código engorroso para los efectos .

    Espero haber ayudado, o por lo menos haber dado un aire de inspiración jejeje.

    Un saludo
    Última edición por hystd; 29-08-2007 a las 17:05
    Citar  
     

  6. #6  
    Moderador Global Avatar de hystd
    Fecha de ingreso
    Jul 2005
    Ubicación
    1, 11, 21, 1211...
    Mensajes
    1.596
    Descargas
    58
    Uploads
    0
    Por cierto, no sé como no se me ha ocurrido antes, pero es posible disminuir el coste y gran parte de código de esta aplicación, si accedemos a unos valores en el registro que contienen la información exacta de dónde se encuentra posicionado cada uno de los iconos en la pantalla. Sólo habría que acceder a estos datos y pasariamos de tener una complejidad cuadrática, recorrer todos los pixeles de la pantalla, a una constante (el acceso a una clave del registro es trivial)

    El único problema es que ahora no recuerdo donde se almacena esta información exactamente en el registro (que alguien monitorice los accesos al registro del explorer.exe con el regmon)

    Un saludo
    Citar  
     

  7. #7  
    Co-Admin HackHispano.com Avatar de clarinetista
    Fecha de ingreso
    Jan 2004
    Ubicación
    HackHispano/SM
    Mensajes
    7.709
    Descargas
    30
    Uploads
    8
    Buen trabajo hystd
    Citar  
     

  8. #8  
    Moderador Global Avatar de hystd
    Fecha de ingreso
    Jul 2005
    Ubicación
    1, 11, 21, 1211...
    Mensajes
    1.596
    Descargas
    58
    Uploads
    0
    Gracias Clarinetista, aunque no estoy conforme con esta resolución del problema, aún pienso que debe haber una manera un poco más elegante de solucionarlo, tal vez metiendo en una librería los iconos en 3D y cargarlos a través de ella cuando sean llamados por la propia API del sistema operativo. Seguiré pensando algunas soluciones e implementandolas cuando tenga tiempo jejeje

    Un saludo
    Citar  
     

  9. #9  
    Avanzado
    Fecha de ingreso
    Jun 2006
    Mensajes
    1.461
    Descargas
    15
    Uploads
    0
    joder hystd eres la puta ostia ¿eh?, muy bueno. (Qué pena, si yo supiera manejar así las apis)...
    Citar  
     

  10. #10  
    Moderador Global Avatar de hystd
    Fecha de ingreso
    Jul 2005
    Ubicación
    1, 11, 21, 1211...
    Mensajes
    1.596
    Descargas
    58
    Uploads
    0
    jajaja, gracias, pero no es para tanto... odio el código fuente no abierto .

    Si lo utilizo, es por intentar conocer a fondo este campo (ya que Windows funciona a través de su API), por su eficacia y por ahorrar algunas lineas de código ¿pq reinventar la rueda si ya está creada? se puede perfeccionar o modificar, pero reescribir algo que ya existe... es perder un poco el tiempo, aunque a veces interesa saber cómo funciona algo y está implementado realmente, jejeje.

    Un saludo
    Última edición por hystd; 30-08-2007 a las 17:38
    Citar  
     

Temas similares

  1. iconos
    Por ponifero en el foro WINDOWS
    Respuestas: 2
    Último mensaje: 21-02-2008, 21:12
  2. Muere Joybubbles, inspirador del movimiento 'hacker'
    Por ABODUJANA en el foro NOTICIAS
    Respuestas: 1
    Último mensaje: 26-08-2007, 05:12
  3. Movimiento browniano en matlab
    Por alcaide en el foro GENERAL
    Respuestas: 7
    Último mensaje: 29-04-2003, 08:24
  4. Algo de movimiento
    Por Angeliyo en el foro GENERAL
    Respuestas: 3
    Último mensaje: 26-12-2001, 02:18

Marcadores

Marcadores

Permisos de publicación

  • No puedes crear nuevos temas
  • No puedes responder temas
  • No puedes subir archivos adjuntos
  • No puedes editar tus mensajes
  •