MoveNode() + MoveEntity()

Found an issue in the documentation ? Please report it here !

Moderator: Documentation Editors

User avatar
DK_PETER
Addict
Addict
Posts: 898
Joined: Sat Feb 19, 2011 10:06 am
Location: Denmark
Contact:

MoveNode() + MoveEntity()

Post by DK_PETER »

More detailed documentation/explanation on how the flags works is requested.

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
Current configurations:
Ubuntu 20.04/64 bit - Window 10 64 bit
Intel 6800K, GeForce Gtx 1060, 32 gb ram.
Amd Ryzen 9 5950X, GeForce 3070, 128 gb ram.
User avatar
Andre
PureBasic Team
PureBasic Team
Posts: 2071
Joined: Fri Apr 25, 2003 6:14 pm
Location: Germany (Saxony, Deutscheinsiedel)
Contact:

Re: MoveNode() + MoveEntity()

Post by Andre »

This is something, the PB 3D experts (I'm not) should improve in the docs.
Bye,
...André
(PureBasicTeam::Docs & Support - PureArea.net | Order:: PureBasic | PureVisionXP)
User avatar
pf shadoko
Enthusiast
Enthusiast
Posts: 291
Joined: Thu Jul 09, 2015 9:07 am

Re: MoveNode() + MoveEntity()

Post by pf shadoko »

all the "Move" command (MoveNode/Entity/Light/Billboard/...) are buggy

in #PB_Absolute mode, they are always in #PB_parent space
this will be corrected in the next version

this is not a documentation error !
Post Reply