Hi
@Psychophanta
Now I added a Box-Collision function to the Library (Not documented at the moment):
Code: Select all
S3DR_TestCollision(O1X1.f,O1Y1.f,O1Z1.f,O1X2.f,O1Y2.f,O1Z2.f,O1X3.f,O1Y3.f,O1Z3.f,O1X4.f,O1Y4
,O1Z4.f,O2X1.f,O2Y1.f,O2Z1.f,O2X2.f,O2Y2.f,O2Z2.f,O2X3.f,O2Y3.f,O2Z3.f,O2X4.f,O2Y4,O2Z4.f)
Download:
http://hometown.aol.de/Gastmailing/S3DR_1_0.zip (115 KB)
Here is a short example:
Code: Select all
InitSprite()
InitSprite3D()
InitKeyboard()
OpenScreen(800,600,16,"TestCollision")
S3DR_CreateZBuffer()
LoadSprite(1,"Texture2.bmp",#PB_Sprite_Texture)
LoadSprite(2,"house.bmp",#PB_Sprite_Texture)
Start3D()
S3DR_BeginReal3D()
S3DR_SetCullMode(#S3DR_NONE)
S3DR_MoveCamera(-20,3,0)
S3DR_RotateCamera(ACos(-1)/2,0,0)
S3DR_UseFog(1,0,100,RGB(220,220,255))
S3DR_EndReal3D()
Stop3D()
Repeat
ExamineKeyboard()
Start3D()
S3DR_BeginReal3D()
S3DR_ClearScreenAndZBuffer(RGB(220,220,255))
If KeyboardPushed(#PB_Key_Left):S3DR_RotateCamera(-0.025,0,0):EndIf
If KeyboardPushed(#PB_Key_Right):S3DR_RotateCamera(0.025,0,0):EndIf
If KeyboardPushed(#PB_Key_Up):S3DR_MoveCamera(0,0,0.5):EndIf
If KeyboardPushed(#PB_Key_Down):S3DR_MoveCamera(0,0,-0.5):EndIf
DX.f+0.01
;Untergrung zeichen:
S3DR_SelectTexture(1)
S3DR_Draw3D(-20,0,20,20,0,20,-20,0,-20,20,0,-20)
S3DR_SelectTexture(2)
S3DR_Draw3D(5,5*Sin(DX),5,-5,5*Sin(DX),5,5,5,-5,-5,5,-5)
Result=S3DR_TestCollision(-20,0,20,20,0,20,-20,0,-20,20,0,-20,5,5*Sin(DX),5,-5,5*Sin(DX),5,5,5,-5,-
5,5,-5)
S3DR_EndReal3D()
Stop3D()
StartDrawing(ScreenOutput())
DrawingMode(1)
DrawingFont(GetStockObject_(#ANSI_FIXED_FONT))
If Result
DrawText("Collision: YES")
Else
DrawText("Collision: NO")
EndIf
StopDrawing()
FlipBuffers()
Until KeyboardPushed(#PB_Key_Escape)
CloseScreen()
If you want an example code for an pixel-exact collision-detection for 3D Sprites, then just ask me.
regards
Stefan