Показать сообщение отдельно
Старый 25.04.2009, 14:14   #1
ELIAS
Знающий
 
Аватар для ELIAS
 
Регистрация: 31.08.2008
Адрес: Arrakis
Сообщений: 234
Написано 6 полезных сообщений
(для 6 пользователей)
Радость Кротчайшее направление плавного разворота!

Опять похожая проблема.
В этот раз просто необходимо поворачивать плано объект в то же направление куда повернут другой объект-пивот. В примере для удобства я взял только поворот по оси игрек.

Вот код:
Graphics3D 1280, 1024, 32, 1

cam=CreateCamera()
CameraClsColor cam, 0, 100,255
CameraRange cam, 1, 1000
MoveEntity cam,0,0,-50
lit=CreateLight()
PositionEntity cam, 2, 10,-2



cube=CreateWCone()
EntityColor cube, 255,0,0

PointEntity cam, cube


pivot=CreateWCone()
PositionEntity pivot, 5,0,0
RotateEntity pivot, 0, Rand(0,360), 0


Repeat
	
	
	If Abs(EntityYaw(cube)-EntityYaw(pivot))<2 
		RotateEntity pivot, 0, Rand(0,360), 0
	EndIf
	
	
	
	SmoothTurn4(cube, pivot, 0.01)
	
	If KeyDown(200)=1 Then MoveEntity cam, 0,0,0.5
	If KeyDown(208)=1 Then MoveEntity cam, 0,0,-0.5
	
	RotateEntity cam, EntityPitch(cam)+MouseYSpeed()*0.2, EntityYaw(cam)-MouseXSpeed()*0.2 ,0
	
	MoveMouse GraphicsWidth()/2,GraphicsHeight()/2
	
	
	
	
	UpdateWorld
    RenderWorld
	
	
    Flip 60
	
	
	
Until KeyHit(1)
End

Function CreateWCone()
	f=CreateCone(4) 
	RotateMesh f,0,0,90
	ScaleMesh f, 1,2,2
	RotateMesh f, 45,90,0
	ScaleMesh f,1.2,1,1
	Return f
End Function

Function SmoothTurn4#(ent1,ent2,speed# = 1)
	
	smx#=(EntityPitch(ent2)-EntityPitch(ent1))*speed
	smy#=(EntityYaw(ent2)-EntityYaw(ent1))*speed
	smz#=(EntityRoll(ent2)-EntityRoll(ent1))*speed
	TurnEntity ent1, smx, smy, smz
	
End Function
Если внимательно приглядыватьтся то совсем несложно увидеть то что красный объект вовсе не всегда поворачивается так как это обычно происходит в жизни. Вместо того чтобы повернуться на -90 градусов, он к примеру повернйтся на 270, и наоборот. Вот именно этот недостаток необходимо устранить.
Я сам никак не могу додуматься как это возможно. Жду вашей помощи!
Спасибо!
(Offline)
 
Ответить с цитированием