Anuncios Google

Una maldad.. Espejos en luadev - Funciona!

Pues se me acaba de ocurrir una pequeña maldad, pero no sé si se puede hacer con luadev.

Necesitaría capturar una imagen de la pantalla, igual que el image.save, pero guardarla en la ram, no en un png.

He supuesto que hacer eso, debería ser casi instantáneo (no sé si lo sería) porque no hay que escribir en la tarjeta de memoria.

Suponiendo esto, imaginaos que esa función está dentro de un while true, por lo que actualiza constántemente esa imagen... 

Entonces solo tendría que "blitearla" rotada 180º para crear, una especie de superficie reflectante.

Bueno se puede capturar en ram? alguien sabe? De todas formas le preguntaré a deviante.

Saludos


Pobre PSP


Anuncios Google

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.

¡Probado!

¡Listo! Ya está testeado y todo. Al final la función era la que dijo Chime: mirrorv()

Se aplica así:

imagen = image.load("imagen.png"); -- Cargas la imagen normal.
imagenRef = image.load("imagen.png"); -- Cargas la misma imagen de antes, pero esta vez le aplicamos la transformación en espejo así…
 
imagenRef:mirrorv(); -- Esto transforma la imagen en efecto espejo.
 
-- ## Aplicación del Efecto ## --
 
while true do -- Y empezamos bucle…
    screen.clear(color.new(200,200,200)); -- Pinto la pantalla para que se vea "bonico" xD
 
    imagen:blit(40,40); -- Imprimo la imagen normal.
    imagenRef:blend(40,40+imagen:height(),150); -- Imprimo el reflejo con menos opacidad para darle realismo, y le sumo a la coordenada "y" la altura de la imagen para que salga justo debajo ;D
 
    screen.flip(); -- Mostramos cambios.
end -- Y fin!

Esto es sólo un miniprogramita para que la idea quede clara, pero las aplicaciones de esta función son casi infinitas :D

Un saludo.


 

 

Imagen de Mills

Me puse a hacer otras cosas y

Me puse a hacer otras cosas y ni lo probé jeje, tendría que ver si capturando la pantalla y usando esta función, el espejo se ve creible en una escena 3d, pero como el hecho de hacer un "screen.toimage" congela momentáneamente luadev, no se puede usar dentro de un while de cualquier manera.

Intentaré aprender a usar la opción multitarea a ver si haciendo el screen.toimage en otro proceso "de fondo" se evitan esos parones.


Pobre PSP

Has probado a hacer el

Has probado a hacer el screen.toimage cada cierto número de ciclos? Por ejemplo...

contador = 0 --Una variable xD
 
while true do
  if contador == 0 then pantallazo = screen.toimage() end  --Tomo la captura
    if contador == 10 then contador = 0 end  --Reinicio el contador cada que llega a 10, para que se actualice la captura
  contador = contador + 1  --Muevo el contador
--Resto del code
end

Eso tomaría la captura cada 10 ciclos de ejecución en lugar de hacerlo 1 vez por ciclo.

Imagen de Mills

Si

Probé haciendo el screen.toimage cada 3 ciclos y no se ve muy bien, porque todo va perfecto hasta que le toca hacer una captura y da un tironcillo, se ve como un DVD o Blue-ray que estuviese rayado jeje.

Aunque ahora que lo pienso, si se limita la tasa de imágenes por ejemplo, a 30 fps, entonces no se nota nada, pero claro, a esa tasa de imágenes es a la que funciona ya de por sí, cuando hace una captura en cada ciclo, así que estamos en las mismas.


Pobre PSP

Joer, Rober...

No se como aún no te has animado a hacer alguna app para PSP, eres un coder genial, tio!

Gracias, pero que va, no soy

Gracias, pero que va, no soy tan coder como crees. No he desarrollado nada para psp que merezca la pena, por falta de ganas, de tiempo y porque ando enredado con un proyectillo en Android (vieras que code tan feo tengo allá xDDD).

Uffff...

Mis codes son también bastante feos... bueno, supongo que la práctica lleva a la perfección ;D

Imagen de User170294

Yo el método que uso ahora

Yo el método que uso ahora mismo para programar es ir escribiendo el code y cuando todo se vuelve muy confuso empezar otro code nuevo basandolo en el anterior pero optimizando todo con mejores funciones y un code más reducido. Ha cada code que desecho le doy un nombre con su versión y lo guardo en el disco duro. Por ejemplo es lo que estoy haciendo con OpenShell, y ya tengo las v0.1, v0.2 y v.0.3. Es algo así como ir depurando el code continuamente.
Saludos.


Entiendo...

Gracias por el consejo, lo voy a probar ;D

De hecho no necesitas cargar

De hecho no necesitas cargar dos veces la misma imagen, ya que al parecer mirrorh y mirrorv se usan igual que rotate o resize (sus efectos permanecen hasta que se hace un reset), a saber:

img=image.load("icono3.png")  --Cargo la img una vez
 
  img:blit(5,5)    --La bliteo
    img:mirrorv()   --La espejo verticalmente
      img:blit(5,125)  --bliteo el espejo
  img:reset()     --Quito los cambios
--Y vuelta a empezar xD

No entiendo...

No entiendo muy bien eso del reset =S

image.reset elimina los

image.reset elimina los cambios hechos en una imagen. Es decir, si escalas, rotas, o espejas una imagen, así se va quedar hasta que no hagas un reset (toma en cuenta que esos efectos no modifican permanentemente la imagen que cargaste, por eso si los quieres conservar tienes que guardarla con image.save).

 

Pero entonces...

Si bliteas, mirrorv, y después bliteas... el primer blit no se transforma en un mirror también??

Imagen de jorge_97

By Jorge_97

WTF??

Pues no ya que eso se queda almacenado en el Buffer y no se modifica para nada ;)

Nunca se puede retroceder en el CODE por así decirlo

Un saludo


Risa Dos años en SCENEBETA Risa

Click aquí para ver la Entrada de Bitácora.

No vale solo con girarla 180º...

El efecto espejo propiamente dicho es un "Volteo Vertical" en PS, que consiste en que los pixeles cambien de posición en la imagen de arriba hacia abajo (simetria axial), y eso es algo que he estado intentando mucho tiempo, desafortunadamente sin exito.

Un saludo.


 

 

Imagen de Chimecho

Imagen = Plano 3D

Supongo que si haces un resize o scalefactor con un valor negativo en Y...

No...

Te lo confirmo, una vez también probé eso y sale como un 180º =/

Imagen de Chimecho

Pues...

¿Y qué tal con un imagen:mirrorv()?

Imagen de User170294

¿Puedes aportar algun dato

¿Puedes aportar algun dato sobre los parámetros y lo que hace? Gracias.

Imagen de Chimecho

Pues...

Lee el comentario que acabo de poner justo en este instante, en teoría debería hacer el espejo vertical de una imagen, pero no recuerdo cómo funciona exactamente, esperemos a que Dovemac haga la prueba.

Saludos!



PSP FAT [5.00 M33-6] [6.60 ME] [Hard Moded] / Nintendo Wii [4.1U] [cIOS Hermes] [D2X cIOS] / iPhone 3G [4.2.1] [BB 05.13.04] [redsn0w] / iPod Touch 4 [6.1] [evasi0n]

07/05/10: Tuve el placer de llamarle con todo derecho "N00B" a molotovi xDDD

Recuerda: Sé el intérprete -_-

Esa función existe?? O___O

Es que no está documentada... dame una alegría chime y dime que no te confundes con otro lenguaje, por favor :DDD

Imagen de Chimecho

Jajajjaja

No, no me confundo para nada, revisé un viejo archivo con todas las variables de lua extraídas (usando lo mismo que usaron para el post de funciones desconocidas) y allí estaba.

Ahora, nunca la he probado, pero supongo que puede ser así:

imagen = image.load("tuimagen.png");
imagen:mirrorh();
imagen:blit(0, 0);
screen.flip();
controls.waitforkey();

o así:

imagen = image.load("tuimagen.png");
espejo = imagen:mirrorh();
espejo:blit(0, 0);
screen.flip();
controls.waitforkey();

No recuerdo bien y no tengo la psp a la mano para probar, pero me suena más la primera forma que la segunda, te lo encargo.

Si te salta un mensaje de que se esperaba number, y recibió nil, supongo que será imagen:mirrorh(x, y) o algo así.

PD: También existe mirrorh.

Saludos!



PSP FAT [5.00 M33-6] [6.60 ME] [Hard Moded] / Nintendo Wii [4.1U] [cIOS Hermes] [D2X cIOS] / iPhone 3G [4.2.1] [BB 05.13.04] [redsn0w] / iPod Touch 4 [6.1] [evasi0n]

07/05/10: Tuve el placer de llamarle con todo derecho "N00B" a molotovi xDDD

Recuerda: Sé el intérprete -_-

Imagen de Mills

lo voy a probar

Pero para hacer espejos en tiempo real como quería yo, necesitas la opcion screen.toimage, y probandola me di cuenta que ralentiza mucho lo demás... aunque a lo mejor si se usa la opcion de las "corutines"... jaja voy a ver si soy capaz.


Pobre PSP

Imagen de Chimecho

Oops

Pequeño error, en los dos ejemplos puse mirrorh, y era mirrorv xD

Cuando esté me avisas plis ;D

Cuando esté me avisas plis ;D

Imagen de Mills

Si es cierto, girarla 180º no

Si es cierto, girarla 180º no vale, pero de todas formas funciona lento, a no se que el screen.toimage solo capturase una parte de la pantalla, o lo hiciese a menor resolución.

De hecho los espejos en blender, funcionan reflejando el "mundo" a menor resolución, aunque usen técnicas de vectores más complicadas, pero bajar la resolución de la textura reflejada aumenta muchísimo el rendimiento y no se ve nada mal. 


Pobre PSP

screen.toimage, te devuelve

screen.toimage, te devuelve una imagen lista para usarse con lo que hay en la pantalla.

Imagen de Mills

Gracias!Si es un poco lento

Gracias!

Si es un poco lento siempre se puede hacer com pocas imágenes por segundo.. Bueno, a ver que tal.

Editado:

Pues si que funciona! aunque baja mucho el rendimiento, pero si funciona a 30 fps y el blit lo hacemos de parte de la captura, pues se ve muy bien :).

Saludos


Pobre PSP

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.