Вот, сам сделал простой пример, исходя из примеров.
IncludeFile "Screen3DRequester.pb"
Structure Vector3
x.f
y.f
z.f
EndStructure
Structure s_Entity
EntityBody.i
Fov.f
MainNode.i
CameraNode.i
EndStructure
Declare HandleEntity(*Entity.s_Entity)
Define Robot.s_Entity
If InitEngine3D()
InitSprite()
InitKeyboard()
InitMouse()
Parse3DScripts()
If Screen3DRequester()
Add3DArchive("Textures" , #PB_3DArchive_FileSystem)
Add3DArchive("Models" , #PB_3DArchive_FileSystem)
Add3DArchive("Packs/waterworld.zip", #PB_3DArchive_Zip)
CreateMaterial(0, LoadTexture(0, "dirt.jpg"))
LoadMesh (0, "robot.mesh")
CreateEntity(0, MeshID(0), #PB_Material_None, 0, 0, 0)
HideEntity(0, 1)
LoadMesh(2, "waterworld.mesh")
CreateEntity(2, MeshID(2), MaterialID(0))
With Robot
\MainNode = CreateNode(#PB_Any)
\CameraNode = CreateNode(#PB_Any, 0, 80, 0)
AttachNodeObject(\MainNode , NodeID(\CameraNode))
EndWith
CreateCamera(0, 0, 0, 100, 100)
AttachNodeObject(Robot\CameraNode, CameraID(0))
CreateLight(0, RGB(0, 255, 255), 200, 100, 200, #PB_Light_Point)
Repeat
Screen3DEvents()
HandleEntity(@Robot)
RenderWorld()
FlipBuffers()
Until KeyboardPushed(#PB_Key_Escape) Or Quit = 1
EndIf
Else
MessageRequester("Error", "The 3D Engine can't be initialized")
EndIf
End
Procedure HandleEntity(*Entity.s_Entity)
Protected.Vector3 Forward, Strafe, PosMain, PosDir, PosStrafe
Protected.f MouseX, MouseY
Static Rot.Vector3
With *Entity
If ExamineMouse()
MouseX = -(MouseDeltaX()/200) * \Fov
MouseY = -(MouseDeltaY()/200) * \Fov
Rot\z = 0
Rot\y + MouseX
If NodePitch(\CameraNode) < 50 And MouseY > 0
Rot\x + MouseY
ElseIf NodePitch(\CameraNode) > -50 And MouseY < 0
Rot\x + MouseY
EndIf
If \Fov < 50
\Fov + 2
EndIf
EndIf
If ExamineKeyboard()
Rot\x * 0.30
Rot\y * 0.30
Rot\z * 0.30
EndIf
RotateEntity(\EntityBody, 0, Rot\y, 0, #PB_Relative)
RotateNode(\CameraNode , Rot\x, 0, 0, #PB_Relative)
RotateNode(\MainNode, 0, EntityYaw(\EntityBody), 0)
EndWith
EndProcedure