Code
; http://www.purebasic.fr/german/viewtopic.php?f=4&t=22900
InitSprite()
InitSprite3D()
; DirectX9
Structure D3DTLVERTEX
x.f:y.f:z.f
rhw.f:Color.l
tu.f:tv.f
EndStructure
Structure PB_DX9Sprite3D
TexRes.i ; TexRes
Vertice.D3DTLVERTEX[4] ; The 4 vertices for the rectangle sprite
TmpVertice.D3DTLVERTEX[4] ; The 4 vertices for the rectangle sprite
Width.l ; width set with ZoomSprite3D()
Height.l ; height set with ZoomSprite3D()
RealWidth.l
RealHeight.l
Angle.f
Transformed.l
EndStructure
Procedure ClipSprite3D(Sprite3D, x, y, Width, Height)
Protected *Sprite3D.PB_DX9Sprite3D = IsSprite3D(Sprite3D)
With *Sprite3D
\Vertice[0]\tu = x / \RealWidth
\Vertice[0]\tv = y / \RealHeight
\Vertice[1]\tu = (x + Width) / \RealWidth
\Vertice[1]\tv = y / \RealHeight
\Vertice[2]\tu = x / \RealWidth
\Vertice[2]\tv = (y + Height) / \RealHeight
\Vertice[3]\tu = (x + Width) / \RealWidth
\Vertice[3]\tv = (y + Height) / \RealHeight
EndWith
EndProcedure
Procedure Sprite3DColor(Sprite3D, Color0, Color1, Color2, Color3)
Protected *Sprite3D.PB_DX9Sprite3D = IsSprite3D(Sprite3D)
With *Sprite3D
\Vertice[0]\Color = Color0
\Vertice[1]\Color = Color1
\Vertice[2]\Color = Color2
\Vertice[3]\Color = Color3
EndWith
EndProcedure
OpenWindow(0, 0, 0, 800, 600, "SCREEN", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
OpenWindowedScreen(WindowID(0), 0, 0, 800, 600, 0, 0, 0)
Sprite3DQuality(1)
CreateSprite(1, 32, 32, #PB_Sprite_Texture)
StartDrawing(SpriteOutput(1))
Box(0,0,8,8,$FFFFFF)
Box(24,0,8,8,$FFFFFF)
Box(0,24,8,8,$FFFFFF)
Box(24,24,8,8,$FFFFFF)
Box(8,8,16,16,$808080)
StopDrawing()
CreateSprite3D(1, 1)
Sprite3DColor(1, $FF0000, $00FF00, $0000FF, $FFFFFF)
Repeat
ClearScreen(0)
Start3D()
ClipSprite3D(1, 0, 0, 32, 32)
RotateSprite3D(1, 0, #PB_Absolute)
ZoomSprite3D(1, 32, 32)
DisplaySprite3D(1, 128, 64)
Time.f = ElapsedMilliseconds()/1000
ClipSprite3D(1, Time*50, Time*70, 256, 256)
RotateSprite3D(1, Time*25, #PB_Absolute)
ZoomSprite3D(1, 256, 256)
DisplaySprite3D(1, 128, 128)
Stop3D()
FlipBuffers()
Until WindowEvent() = #PB_Event_CloseWindow