|
3D-программирование Вопросы, касающиеся программирования 3D мира |
10.03.2006, 00:05
|
#1
|
AnyKey`щик
Регистрация: 07.03.2006
Сообщений: 11
Написано 0 полезных сообщений (для 0 пользователей)
|
код
;============================================
DefScreenSizeX =800
DefScreenSizeY=600
DefScreenColorMode=32
Graphics3D DefScreenSizeX, DefScreenSizeY, DefScreenColorMode, 0
SetBuffer BackBuffer()
;============================================
Global player
Global camera
Global camPivot
Global camDest# = 24
;============================================
Function SpawnPlayer()
px# =0
py# =0
pz# =0
player = LoadAnimMesh ("data\models\tmp.b3d")
camPivot=CreateCamera(player)
camera=CreateCamera(camPivot)
PositionEntity player, px#, py#, pz#
PositionEntity camera, 0, camDest#, camDest# *-1
End Function
Function GroundPlane();test
ground = CreatePlane()
PositionEntity ground, 0, 0, 0
grass = LoadTexture("data\textures\ground01.tga")
ScaleTexture grass, 10, 10
EntityTexture ground, grass
End Function
Function PlayerControl()
V#=0.5
u#=0
camDest# =camDest# - MouseZSpeed()
If camDest# <4 Then camDest# =16
If camDest# >64 Then camDest# =32
TurnEntity camPivot, MouseYSpeed(),0,0
TurnEntity camPivot, 0,-MouseXSpeed(),0
If KeyDown(200) Then MoveEntity player, 0, 0, 1
If KeyDown(208) Then MoveEntity player, 0, 0, -1
If KeyDown(203) Then TurnEntity player, 0, 5, 0
If KeyDown (205) Then TurnEntity player, 0, -5, 0
MoveMouse GraphicsWidth()*0.5, GraphicsHeight()*0.5
PositionEntity camera, 0, camDest# , camDest# *-1
PointEntity camera, player
End Function
;============================================
GroundPlane()
SpawnPlayer()
;============================================
While Not KeyHit(1)=1
PlayerControl()
RenderWorld()
Print EntityPitch#(camPivot)
Print EntityYaw#(camPivot)
Print EntityRoll#(camPivot)
Flip
Wend
End
Проблема:
камера должна вращаться вокруг игрока- она это делает, но при определенном повороте по одной из осей начинается непредсказуемое вращение....
Пробовал ставить ограничения разные на угол поворота- получается резкий скачек при вращении камерой- не красиво.
Подскажите, пожалуста, как сделать нормальное вращение камеры вокруг игрока?
|
(Offline)
|
|
10.03.2006, 00:14
|
#2
|
|
думаю тебе поможет команда entityparent
|
|
|
10.03.2006, 00:31
|
#3
|
Гигант индустрии
Регистрация: 14.12.2005
Сообщений: 2,785
Написано 1,183 полезных сообщений (для 4,437 пользователей)
|
Меняй управление камерой.
Например на такое:
mxs# = MouseXSpeed()/pop
*mys# = MouseYSpeed()/pop
If mys>4 mys=4
If mys<-4 mys=-4
*
*dest_xang# = dest_xang + mys
*dest_yang# = dest_yang - mxs
*xang# = CurveValue (xang, dest_xang, 10)
*yang# = CurveValue (yang, dest_yang, 10)
* * * * * *
* * *If xang>80 xang=80:dest_xang=80
If xang<-80 xang=-80:dest_xang=-80 * * * * *
* * * MoveMouse xcur,ycur
RotateEntity cam,xang,yang,0
Function CurveValue#(current#,destination#,curve)
current#=current#+((destination#-current#)/curve)
Return current#
End Function
Ну естественно приспособь для своей специфики. Так как выдаются переменные на управление камерой, то очень легко их ограничивать и тд.
"Резиновость" камеры последний аргумент в функции CurveValue
__________________
|
(Offline)
|
|
10.03.2006, 00:31
|
#4
|
AnyKey`щик
Регистрация: 07.03.2006
Сообщений: 11
Написано 0 полезных сообщений (для 0 пользователей)
|
не очень хорошо понимаю, чем она мне поможет, если честно...
она вроде как прикреплялка работает, не?
у меня проблема скорее с ограничениями по осям- из-за алгоритмов, которые я использую при вращении камеры происходит типа "перекручивания", после которого движение камеры уже идет не как задуманно...
|
(Offline)
|
|
11.03.2006, 00:05
|
#5
|
AnyKey`щик
Регистрация: 07.03.2006
Сообщений: 11
Написано 0 полезных сообщений (для 0 пользователей)
|
Спасиб. за советы, но я сделал свой хак уже)
camDest# =camDest# - MouseZSpeed()
camHel# =camHel# + MouseYSpeed()
If camDest# <16 Then camDest# =16
If camDest# >64 Then camDest# =64
If camHel# <1 Then camHel# =1
If camHel# >63 Then camHel# =63
camPos# = Sqr ((camDest# *camDest#)-(camHel# * camHel#))
If KeyDown(200) Then MoveEntity player, 0, 0, 1
If KeyDown(208) Then MoveEntity player, 0, 0, -1
If KeyDown(203) Then TurnEntity player, 0, 5, 0
If KeyDown (205) Then TurnEntity player, 0, -5, 0
MoveMouse GraphicsWidth()*0.5, GraphicsHeight()*0.5
TurnEntity camPivot, 0, -MouseXSpeed(), 0
PositionEntity camera, 0, camHel#, camPos# *-1
PointEntity camera, player
Через теорему Пифагора......)))
|
(Offline)
|
|
11.03.2006, 01:05
|
#6
|
Злобный Админ
Регистрация: 04.09.2005
Сообщений: 5,926
Написано 3,415 полезных сообщений (для 9,330 пользователей)
|
Меня умиляют эти посты...TurnEntity вообщето для поворота вокруг СОБСТВЕННОЙ оси... что это значит? Это значит, что поворачиваясь вокруг собственной оси например Z вы поворачиваете и две остальные оси, и как результат "непредвиденное" или "глючное" поведение камеры... Если вам нужны глобальные повороты юзайте RotateEntity, или TurnEntity относительно родителя...
в хелпе всё есть..хотя и довольно сжато..
__________________
|
(Offline)
|
|
11.03.2006, 11:16
|
#7
|
AnyKey`щик
Регистрация: 07.03.2006
Сообщений: 11
Написано 0 полезных сообщений (для 0 пользователей)
|
Originally posted by SBJoker@11.3.2006, 1:05
Меня умиляют эти посты...TurnEntity вообщето для поворота вокруг СОБСТВЕННОЙ оси... что это значит? Это значит, что поворачиваясь вокруг собственной оси например Z вы поворачиваете и две остальные оси, и как результат "непредвиденное" или "глючное" поведение камеры... Если вам нужны глобальные повороты юзайте RotateEntity, или TurnEntity относительно родителя...
в хелпе всё есть..хотя и довольно сжато..
|
Жалко, ты не вразумил меня немного раньше...)
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 18:21.
|