forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   PureBasic (http://forum.boolean.name/forumdisplay.php?f=90)
-   -   Пивот для камеры (http://forum.boolean.name/showthread.php?t=18245)

mtaracing 07.06.2013 23:34

Пивот для камеры
 
Здравствуйте, столкнулся с проблемой, ни как не получается сделать пивот для камеры, то есть чтобы камера не крутилась на 360 градусов по оси Y, пробовал разобрать принцип работы из примеров в папке DEMO, но там очень большой код, и много лишнего. Пробовал сам получать угол поворота камеры и возвращать его. но ничего не получается. Кому не сложно напишите пожалуйста пример. Заранее спасибо.

Кирпи4 08.06.2013 12:30

Ответ: Пивот для камеры
 
Плюнь, в пурике огр полное говно. Юзай ксорс или ещё что нибудь

mtaracing 08.06.2013 12:40

Ответ: Пивот для камеры
 
Цитата:

Сообщение от Кирпи4 (Сообщение 260845)
Плюнь, в пурике огр полное говно. Юзай ксорс или ещё что нибудь

Ну я бы так не сказал. По сабжу кто нибудь поможет? (Обидно что в Blitz, это реализуется несколькими строчками кода...)

mtaracing 08.06.2013 23:03

Ответ: Пивот для камеры
 
Вот, сам сделал простой пример, исходя из примеров.

Код:

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


mtaracing 11.06.2013 21:40

Ответ: Пивот для камеры
 
Заметил в этом коде проблему ,если установить камеру в точку, то она не крутится в точке, а смещается с точки и крутится, как решить такую проблему не знаю, уже не один вечер сижу разбираюсь...

Кирпи4 14.06.2013 15:57

Ответ: Пивот для камеры
 
Чувак, я серьёзно - огр неудобный. Вот, тебе в помощь:
http://forum.boolean.name/showpost.p...&postcount=124
и начинай покорять геймдев с ксорсом

mtaracing 17.06.2013 11:55

Ответ: Пивот для камеры
 
Да норм всё. Уже разобрался.

mtaracing 17.06.2013 18:32

Ответ: Пивот для камеры
 
Кстати, кому будет нужно, пишите расскажу и покажу.

St_AnGer 17.06.2013 19:34

Ответ: Пивот для камеры
 
Кому-нибудь когда-нибудь в любом случае пригодится - форум для того и нужен, что бы делиться полезными мыслями с другими. Так что пиши, выкладывай, не стесняйся. Чем подробнее, тем больше шансов что кому то поможешь. Могут конечно налететь "знатоки" и обплевать, но критика никогда не была лишней, даже если она плохая.


Часовой пояс GMT +4, время: 12:31.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot