Показать сообщение отдельно
Старый 08.06.2013, 23:03   #4
mtaracing
Нуждающийся
 
Аватар для mtaracing
 
Регистрация: 22.05.2013
Сообщений: 53
Написано 3 полезных сообщений
(для 26 пользователей)
Ответ: Пивот для камеры

Вот, сам сделал простой пример, исходя из примеров.

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
(Offline)
 
Ответить с цитированием