viewtopic.php?f=36&t=74649
Mixed some of the flags in the example below:
Code: Select all
InitEngine3D()
InitSprite()
InitKeyboard()
Structure Object
id.i
ms.i
ma.i
tx.i
EndStructure
Global parent.Object, Child1.Object, Child2.Object, Quit = #False
Global sp1.i, sp2.i, sp3.i, ret.i
Declare.i Drawdata(*sp, *o)
OpenWindow(0, 0, 0, 800, 600, "Positions", #PB_Window_ScreenCentered|#PB_Window_SystemMenu)
OpenWindowedScreen(WindowID(0), 0, 0, 800, 600)
CreateCamera(0, 0, 0, 100, 100)
MoveCamera(0, 0, 0, 5)
sp1 = CreateSprite(#PB_Any, 250, 40)
sp2 = CreateSprite(#PB_Any, 250, 40)
sp3 = CreateSprite(#PB_Any, 295, 130)
StartDrawing(SpriteOutput(sp3))
DrawingMode(#PB_2DDrawing_Outlined)
RoundBox(0, 0, OutputWidth(), OutputHeight(), 3, 3, $00FF0A)
DrawingMode(#PB_2DDrawing_Transparent)
DrawText(3, 3, "Left/right arrows: Rotate parent relative")
DrawText(3, 23, "Up/Down arrows : Rotate children relative")
DrawText(3, 43, "+ : Move children #PB_Absolute|#PB_Local")
DrawText(3, 63, "- : Move children #PB_Absolute|#PB_World")
DrawText(3, 83, "PGUP : Mov child #PB_Absolute|#PB_Parent")
DrawText(3, 103, "PGDN : Mov child #PB_Relative|#PB_World")
StopDrawing()
With parent
\ms = CreateCube(#PB_Any, 0.5)
\tx = CreateTexture(#PB_Any, 100, 100)
StartDrawing(TextureOutput(\tx))
Box(0, 0, 100, 100, $00FF42)
Box(4, 4, 92, 92, $0)
StopDrawing()
\ma = CreateMaterial(#PB_Any, TextureID(\tx))
MaterialBlendingMode(\ma, #PB_Material_Add)
MaterialFilteringMode(\ma, #PB_Material_Anisotropic, 8)
MaterialCullingMode(\ma, #PB_Material_NoCulling)
\id = CreateEntity(#PB_Any, MeshID(\ms), MaterialID(\ma), 0, 0, 0)
EndWith
With Child1
\ms = CreateCube(#PB_Any, 0.2)
\tx = CreateTexture(#PB_Any, 100, 100)
StartDrawing(TextureOutput(\tx))
Box(0, 0, 100, 100, $00FFFF)
Box(10, 10, 80, 80, $0)
StopDrawing()
\ma = CreateMaterial(#PB_Any, TextureID(\tx))
MaterialBlendingMode(\ma, #PB_Material_Add)
MaterialFilteringMode(\ma, #PB_Material_Anisotropic, 8)
MaterialCullingMode(\ma, #PB_Material_NoCulling)
\id = CreateEntity(#PB_Any, MeshID(\ms), MaterialID(\ma), -0.8, 0, 0)
EndWith
With Child2
\ms = CreateCube(#PB_Any, 0.2)
\tx = CreateTexture(#PB_Any, 100, 100)
StartDrawing(TextureOutput(\tx))
Box(0, 0, 100, 100, $0000FF)
Box(10, 10, 80, 80, $0)
StopDrawing()
\ma = CreateMaterial(#PB_Any, TextureID(\tx))
MaterialBlendingMode(\ma, #PB_Material_Add)
MaterialFilteringMode(\ma, #PB_Material_Anisotropic, 8)
MaterialCullingMode(\ma, #PB_Material_NoCulling)
\id = CreateEntity(#PB_Any, MeshID(\ms), MaterialID(\ma), 0.8, 0, 0)
EndWith
AttachEntityObject(parent\id, "", EntityID(child1\id))
AttachEntityObject(parent\id, "", EntityID(child2\id))
ret = Drawdata(sp1, Child1\id)
ret = Drawdata(sp2, Child2\id)
Repeat
Repeat : ev = WindowEvent() : If ev = #PB_Event_CloseWindow : Quit = #True : EndIf : Until ev = 0
ExamineKeyboard()
If KeyboardPushed(#PB_Key_Left)
RotateEntity(parent\id, 0, 1, 0, #PB_Relative)
ElseIf KeyboardPushed(#PB_Key_Right)
RotateEntity(parent\id, 0, -1, 0, #PB_Relative)
EndIf
If KeyboardPushed(#PB_Key_Up)
RotateEntity(child1\id, 0.05, 1, 0.05, #PB_Relative)
RotateEntity(child2\id, -0.05, 1, 0.05, #PB_Relative)
ElseIf KeyboardPushed(#PB_Key_Down)
RotateEntity(child1\id, -0.05, -1, -0.05, #PB_Relative)
RotateEntity(child2\id, 0.05, -1, -0.05, #PB_Relative)
EndIf
If KeyboardPushed(#PB_Key_Add)
MoveEntity(child1\id, 0.001, 0, 0, #PB_Absolute|#PB_World)
MoveEntity(child2\id, -0.001, 0, 0, #PB_Absolute|#PB_Parent)
ConvertLocalToWorldPosition(EntityID(child1\id), EntityX(child1\id), EntityY(child1\id), EntityZ(child1\id))
ret = Drawdata(sp1, Child1\id)
ElseIf KeyboardPushed(#PB_Key_Subtract)
MoveEntity(child1\id, -0.001, 0, 0, #PB_Absolute|#PB_Parent)
MoveEntity(child2\id, 0.001, 0, 0, #PB_Absolute|#PB_Local)
ConvertLocalToWorldPosition(EntityID(child1\id), EntityX(child1\id), EntityY(child1\id), EntityZ(child1\id))
ret = Drawdata(sp2, Child2\id)
EndIf
If KeyboardPushed(#PB_Key_PageUp)
MoveEntity(child1\id, 0.001, 0, 0, #PB_Absolute|#PB_Parent)
MoveEntity(child2\id, -0.001, 0, 0, #PB_Absolute|#PB_Parent)
ConvertLocalToWorldPosition(EntityID(child1\id), EntityX(child1\id), EntityY(child1\id), EntityZ(child1\id))
ret = Drawdata(sp1, Child1\id)
ElseIf KeyboardPushed(#PB_Key_PageUp)
MoveEntity(child1\id, -0.001, 0, 0, #PB_Relative|#PB_World)
MoveEntity(child2\id, 0.001, 0, 0, #PB_Relative|#PB_World)
ConvertLocalToWorldPosition(EntityID(child1\id), EntityX(child1\id), EntityY(child1\id), EntityZ(child1\id))
ret = Drawdata(sp2, Child2\id)
EndIf
RenderWorld()
DisplaySprite(sp1, 0, 0)
DisplaySprite(sp2, 548, 0)
DisplaySprite(sp3, 252, 0)
FlipBuffers()
Until Quit = #True Or KeyboardPushed(#PB_Key_Escape)
Procedure.i Drawdata(*sp, *o)
StartDrawing(SpriteOutput(*sp))
Box(0, 0, OutputWidth(), OutputHeight(), $0)
DrawingMode(#PB_2DDrawing_Outlined)
RoundBox(0, 0, OutputWidth(), OutputHeight(), 3, 3, $00FF0A)
DrawingMode(#PB_2DDrawing_Transparent)
DrawText(3, 3, "Pos: " + StrF(EntityX(*o), 3) + " : " + StrF(EntityY(*o), 3) + " : " + StrF(EntityZ(*o), 3))
DrawText(3, 22,"L2W: " + StrF(GetX(), 3) + " : " + StrF(GetY(), 3) + " : " + StrF(GetZ(), 3))
StopDrawing()
ProcedureReturn #True
EndProcedure