Задача моя:
Сделать камеру с солнечными бликами и её вращение вокруг персонажа мышкой при зажатой какой нть клавише и при отпускании этой клавиши камера должна возвращаться за спину персонажа.
Делал:
взял код из примера
Sun.rar
И вот что получилось:
user_piv=CreatePivot ()
PositionEntity user_piv_emat,-1,2,0
EntityType user_piv,user_col
Model=CreateCube (user_piv)
RotateEntity Model,0,0,0
EntityColor Model,Int(Rnd(255)),Int(Rnd(255)),Int(Rnd(255))
ViewX = GraphicsWidth();<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
ViewY = GraphicsHeight();<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
ViewAspect# = Float(ViewX)/Float(ViewY);<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
Camera = CreateCamera(Model)
;CameraRange Camera, 1, 5000
spritecamera = Camera;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
spritepivot = CreateSpritePivot(spritecamera,1.01) ;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
CameraClsColor camera,0,0,0
PositionEntity camera,0,4,-8
CameraRange camera,0.1,5000
Sun = CreatePivot()
Light = CreateLight(2, Sun)
PositionEntity Sun, -549, 1015, 33, 1
SetupFlares("lens-flares.jpg") ;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
PointEntity Camera, Sun
после Repeat
UpdateFlare(Camera, Sun) ;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
mx#=CurveValue(MouseXSpeed()*0.4,mx,11)
my#=CurveValue(MouseYSpeed()*0.4,my,11)
MoveMouse GraphicsWidth()/2,GraphicsHeight()/2
pitch#=EntityPitch(user_piv)
yaw#=EntityYaw(user_piv)
pitch=pitch+my
yaw=yaw-mx
If pitch>89 pitch=89
If pitch<-89 pitch=-89
RotateEntity user_piv,0,yaw,0
;RotateEntity Camera,0,yaw,0
TurnEntity Camera,pitch,0,0
Проблема:
Камера при старте где то с боку и вращается вокруг какой та точки до тех пор пока камера не будет опушена взглядом в землю тогда камера оказывается там где должна(позади перса и при движении мыши перс поворачивается)
Если я дописываю код для вращения
Graphics3D 800,600 , 32, 2
Global user_pivot=CreatePivot() ; Создаешь точку
cri=CreateLight ()
cam=CreatePlane()
cam_tex=LoadTexture ("807331659.jpg")
ScaleTexture cam_tex,4,4
EntityTexture cam,cam_tex
camera = CreateCamera ()
Model=CreateCube ()
EntityColor Model,Int(Rnd(255)),Int(Rnd(255)),Int(Rnd(255))
Model1=CreateCube ()
EntityColor Model1,Int(Rnd(235)),Int(Rnd(255)),Int(Rnd(215))
PositionEntity Model1,10,0,1
PositionEntity camera,0,5,-10 ; Ставим камеру в первоначальные координаты (Относительно твоего игрока ) . Получается , что камера находится чуть вверху и позади .
;Далее пишешь в цикле
b1#=0;предельный угол
While Not KeyDown( 1 )
mx=MouseXSpeed()
PositionEntity user_pivot,EntityX(Model),EntityY(Model),EntityZ(Model) ; Делаем так , чтобы точка всегда была в координатах "YourPlayer" (это твой игрок) . Но не вертелась вместе с игроком .
If MouseDown (2) ;button = 1: Левая кнопка, 2: Правая кнопка, 3: Средняя кнопка
RotCamera=1
Else
RotCamera=0
EndIf
If RotCamera=1 Then
EntityParent camera,user_pivot ; Прикрепляем твою камеру к созданной точке .
;TurnEntity user_pivot,0,2,0
TurnEntity user_pivot,0,-mx,0
EndIf
If RotCamera=0 Then
RotateEntity user_pivot,0,0,0
;Abs(EntityYaw#(pivot1))
EndIf
UpdateWorld()
RenderWorld()
Text 0,20,"Yaw: "+EntityYaw#(user_pivot)
Flip
Wend
;----------------------------
End
камера двигается по прямой и после отпускания клавиши вращается перс а не поворачиваться
Как лечить этот баг и сделать осмотр персонажа камерой?