• Welcome to Dark Bit Factory & Gravity.
 

BlitzMax RotoZoom[BMAX]

Started by zparticle, June 13, 2006

Previous topic - Next topic

0 Members and 0 Guests are viewing this topic.

zparticle

A conversion of Rbraz's rotozoom from the coding competition to BlitzMax.

http://www.scottshaver2000.com/blitz/effects/rotozoom/rotozoom.exe






'=================================================================
' By: Scott Shaver
'
' This is based HEAVILY on code from Rbraz at the Dark Bit Factory
' forums. The original version was in PlitzPlus.
'=================================================================
Strict

Framework BRL.GlMax2D
Import BRL.System
Import BRL.Basic
Import BRL.Retro
Import BRL.Max2D
Import BRL.pngloader

Graphics 320,240',32',60

'=================================================================
SetMaskColor(0,0,0)
Incbin "zp-logo.png"
Global logo:TImage = LoadImage("incbin::zp-logo.png")
Global pixmap:TPixmap = LockImage(logo)

Incbin "background2.png"
Global bg:TImage = LoadImage("incbin::background2.png")


Global ang:Double=0
'=================================================================
While Not KeyHit(KEY_ESCAPE)
Cls

' draw the background
SetAlpha(1)
SetColor(255,255,255)
TileImage(bg,0,0)

' do the rotation and zoom
DoIt(pixmap,ang)

' increase the angle each frame
ang:+1
Flip
Wend
UnlockImage(logo)
End

' this is the rotozoom function
Function DoIt(pixmap:TPixmap,angle:Float)

Local osin:Double = Sin(angle)
Local sina:Float = (osin*1.5)*(osin*1.5)
Local cosa:Float = (Cos(angle)*1.5)*(osin*1.5)
Local w:Int = GraphicsWidth()
Local h:Int = GraphicsHeight()
Local iw:Int = pixmap.width'ImageWidth(image)
Local ih:Int = pixmap.height'ImageHeight(image)
Local iwh:Int = iw Shr 1
Local ihh:Int = ih Shr 1

' fill in the entire screen area
For Local x:Int = 0 Until w
For Local y:Int = 0 Until h

' find out which image pixel to read from
Local rx:Double = Abs((x * cosa - y * sina) + iwh) Mod iw
Local ry:Double = Abs((x * sina + y * cosa) + ihh) Mod ih

Local pixel:Int = pixmap.ReadPixel(rx,ry)
Local a:Float = (pixel & $FF000000) Shr 24
If a>0 Then
Local r:Float = (pixel & $00FF0000) Shr 16
Local g:Float = (pixel & $0000FF00) Shr 8
Local b:Float = (pixel & $000000FF)
SetAlpha(a/255)
SetColor(r,g,b)
Plot x,y
EndIf
Next
Next
End Function

asdflkj

#1
-


Rbz

Challenge Trophies Won:

benny!

#4
Nice FX ... but is it just on my machine (WinXP) that the app is still running
in the background after quitting it with ESCAPE  ???


I have to kill it manually in the task-manager ...


EDIT: I was wrong - it just happens when you press the close button
of the window
[ mycroBLOG - POUET :: whatever keeps us longing - for another breath of air - is getting rare ]

Challenge Trophies Won:

zparticle

Opps sorry, you need to hit Escape to quit not the window close button.

benny!

Ups ... you are right ... with exiting by pressing ESCAPE the programm
is really killed !!!
[ mycroBLOG - POUET :: whatever keeps us longing - for another breath of air - is getting rare ]

Challenge Trophies Won:

Shockwave

Cool stuff, smooth too :)
Shockwave ^ Codigos
Challenge Trophies Won:

zawran

@zparticle,  in you main loop you could have this "If AppTerminate() Then End" that would end the program if someone uses the X to close the application.

zparticle


zawran

No problem. You have done some pretty nice stuff with Bmax so far. Keep it coming, always interested in seeing what others get out of using it.