Показать сообщение отдельно
Старый 23.06.2009, 18:49   #1
Dark_Fox
Оператор ЭВМ
 
Аватар для Dark_Fox
 
Регистрация: 30.01.2008
Адрес: Щелково-3
Сообщений: 25
Написано 0 полезных сообщений
(для 0 пользователей)
Смех Глюки камеры блик и вращении её вокруг перса

Задача моя:
Сделать камеру с солнечными бликами и её вращение вокруг персонажа мышкой при зажатой какой нть клавише и при отпускании этой клавиши камера должна возвращаться за спину персонажа.

Делал:
взял код из примера 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
камера двигается по прямой и после отпускания клавиши вращается перс а не поворачиваться

Как лечить этот баг и сделать осмотр персонажа камерой?
(Offline)
 
Ответить с цитированием