Imho, I'm not so sure it's a bug. It's more an error in the documentation about ConvertLocalToWorldPosition() and its counterpart.
I believe that the functions are valid for 'physical objects in 3D space' only.
They don't work for Cameras, Nodes and mesh.
Code: Select all
EnableExplicit
InitEngine3D()
InitSprite()
InitKeyboard()
Global ret.i, ev.i
Declare.i Test(Index)
OpenWindow(0, 0, 0, 1024, 768, "Test", #PB_Window_ScreenCentered)
OpenWindowedScreen(WindowID(0), 0, 0, 1024, 768)
CreateCamera(0, 0, 0, 100, 100)
MoveCamera(0, 0, 0, 2)
CreateLight(0, $FFFFFF, -10, -4, 0)
CreateCube(0, 0.1)
CreateTexture(0, 128, 128,"Cube")
StartDrawing(TextureOutput(0))
Box(0, 0, 128, 128, $26F522)
Box(5, 5, 118, 118, $0)
StopDrawing()
CreateMaterial(0, TextureID(0))
MaterialBlendingMode(0, #PB_Material_Add)
MaterialFilteringMode(0, #PB_Material_Anisotropic, 6)
CreateEntity(0, MeshID(0), MaterialID(0), 0, 0, 0)
CopyEntity(0, 1)
ScaleEntity(1, 0.5, 0.5, 0.5)
CreateNode(0, 0, 0, 0)
CreateNode(1, 1, 0, 0)
AttachNodeObject(0, NodeID(1))
CreateParticleEmitter(0, 5, 5, 5, #PB_Particle_Box, 0, 0, -5)
ParticleEmitterDirection(0, 0, 0, 1)
ParticleMaterial(0, MaterialID(0))
ParticleSize(0, 0.05, 0.05)
ParticleEmissionRate(0, 100)
ParticleVelocity(0, #PB_Particle_MinimumVelocity, 0.1)
ParticleVelocity(0, #PB_Particle_Velocity, 0.4)
ParticleVelocity(0, #PB_Particle_MaximumVelocity, 1)
CreateBillboardGroup(0, MaterialID(0), 1, 1, 0, 0, 0)
AddBillboard(0, -1, 1, -2)
AddBillboard(0, 1, 1, -2)
AddBillboard(0, 1, -1, -2)
AddBillboard(0, -1, -1, -2)
Repeat
Repeat : ev = WindowEvent() : Until ev = 0
RotateEntity(0, 0.1, -0.1, 0.1, #PB_Relative)
RotateEntity(1, -0.1, 0.1, -0.1, #PB_Relative)
RotateBillboardGroup(0, 0, 0, 0.03, #PB_Relative)
RenderWorld()
FlipBuffers()
ExamineKeyboard()
If KeyboardReleased(#PB_Key_1)
Test(1)
EndIf
If KeyboardReleased(#PB_Key_2)
Test(2)
EndIf
If KeyboardReleased(#PB_Key_3)
Test(3)
EndIf
If KeyboardReleased(#PB_Key_4)
Test(4)
EndIf
If KeyboardReleased(#PB_Key_5)
Test(5)
EndIf
If KeyboardReleased(#PB_Key_6)
Test(6)
EndIf
If KeyboardReleased(#PB_Key_7)
Test(7)
EndIf
Until KeyboardPushed(#PB_Key_Escape)
Procedure.i Test(Index)
Select Index
Case 1
Debug "Entity"
ConvertLocalToWorldPosition(EntityID(0), 0, 0, 0) ; Works
Debug GetX()
Debug GetY()
Debug GetZ()
Case 2
Debug "Mesh"
ConvertLocalToWorldPosition(MeshID(0), 0, 0, 0) ; Fails
Debug GetX()
Debug GetY()
Debug GetZ()
Case 3
Debug "BillBoard"
ConvertLocalToWorldPosition(BillboardGroupID(0), 0, 0, 0) ; Works
Debug GetX()
Debug GetY()
Debug GetZ()
Case 4
Debug "Camera"
ConvertLocalToWorldPosition(CameraID(0), 0, 0, 0) ; Fails
Debug GetX()
Debug GetY()
Debug GetZ()
Case 5
Debug "Light"
ConvertLocalToWorldPosition(LightID(0), 0, 0, 0) ; Works
Debug GetX()
Debug GetY()
Debug GetZ()
Case 6
Debug "Node"
ConvertLocalToWorldPosition(NodeID(0), 0, 0, 0) ; Fails
Debug GetX()
Debug GetY()
Debug GetZ()
Case 7
Debug "Particle"
ConvertLocalToWorldPosition(ParticleEmitterID(0), 0, 0, 0) ; Fails
Debug GetX()
Debug GetY()
Debug GetZ()
EndSelect
ProcedureReturn #True
EndProcedure