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.
However...The errors thrown, when using invalid objects should be catched..
Code:
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