Code: Alles auswählen
Procedure DrawSprite(SpriteBuffer,SpriteBufferPitch,SpriteWidth,SpriteHeight,TBuffer,TBufferPitch,TWidth,THeight,tx,ty,rot.f,trans)
Protected *source.LONG, x,y, tmp_x, tmp_y, tmp_yr, SpriteWidth2, SpriteHeight2, SinR.f, CosR.f, yr_SinR.f, yr_CosR.f, Buffer
SinR = Sin(rot)
CosR = Cos(rot)
SpriteWidth2 = SpriteWidth/2
SpriteHeight2 = SpriteWidth/2
For y = 0 To SpriteHeight-1
*source = SpriteBuffer+SpriteBufferPitch*y
tmp_yr = (y-SpriteHeight2)
yr_SinR = tmp_yr * SinR
yr_CosR = tmp_yr * CosR
For x = -SpriteWidth2 To SpriteWidth2
If *source\l <> trans
tmp_x = tx + SpriteWidth2 + x * CosR - yr_SinR
tmp_y = ty + SpriteHeight2 + x * SinR + yr_CosR
If tmp_x >= 0 And tmp_y >= 0 And tmp_x < TWidth And tmp_y < THeight
PokeL(TBuffer+tmp_y*TBufferPitch+tmp_x*4,*source\l)
EndIf
EndIf
*source + 4
Next
Next
EndProcedure
InitKeyboard()
InitSprite()
InitSprite3D()
OpenScreen(1024,768,32,"Sprite3D-Test")
SetFrameRate(60)
CreateSprite(0,64,64,#PB_Sprite_Texture)
StartDrawing(SpriteOutput(0))
SpriteBuffer = DrawingBuffer()
SpriteBufferPitch = DrawingBufferPitch()
Box(2,2,60,60,255|255<<16)
LineXY(0,0,63,63,255)
LineXY(30,0,20,63,255<<8)
LineXY(63,0,0,63,255<<16)
StopDrawing()
CreateSprite3D(0,0)
Repeat
angle + 1
ClearScreen(100,0,0)
ExamineKeyboard()
If KeyboardPushed(#PB_Key_Space):angle = 0:EndIf
DisplaySprite(0,100,20)
RotateSprite3D(0,angle,0)
Start3D()
DisplaySprite3D(0,100,100)
Stop3D()
StartDrawing(ScreenOutput())
DrawingBuffer = DrawingBuffer()
DrawingBufferPitch = DrawingBufferPitch()
StopDrawing()
DrawSprite(SpriteBuffer,SpriteBufferPitch,64,64,DrawingBuffer,DrawingBufferPitch,1024,768,0,0,angle*3.141593/180,0)
FlipBuffers()
Until KeyboardPushed(#PB_Key_Escape)
CloseScreen()1. Prob:
Bei mir flackert das Sprite von DisplaySprite (das rechts oben). Wenn ich das Sprite in den Ram lade ist das nicht so, nur mit #PB_Sprite_Texture geladen wird es nicht richtig angezeigt. Kann das jemand bestätigen? Wenn ja, warum ist das so?
2. Prob:
Wenn man Space drück wird der Winkel auf 0 zurückgesetzt, aber das Sprite das mit DisplaySprite3D angezeigt wird (rechts unten) wird um irgendeinen anderen Winkel gedreht. Why?
3. Prob:
Links oben ist das Sprite das mit DrawSprite angezeigt wird. Dort wird aber die pinke Fläche nicht ausgefüllt. Warum das so ist weiß ich, ich will nur wissen ob ihr eine Idee habt wie man das am besten ändern kann.
