Я хочу SLERP вращение ObjectA по отношению к положению ObjectB в течение определенного периода времени. Интерполяция, которую я работаю, я не могу понять, как создать DestinationRotation (взгляд на вращение или вращение, которое ObjectA должно в конечном итоге достигать)
Каковы шаги для достижения этого?
Что у меня есть в наличии:
Как рассчитать Look to Rotation?
Примечание. Это язык программирования Verse, использующий библиотеки пространственной математики Unreal Engine, но моя проблема не столько в коде, сколько в знании того, какие инструменты (математику) использовать в каком порядке.
loop:
Sleep(0.0)
CurrentTime := GetSimulationElapsedTime()
DeltaTime := CurrentTime - PreviousTime
set PreviousTime = CurrentTime
var MoveToPosition : vector2 = vector2{X := 0.0, Y := 0.0}
# Player Current Position
if (Agent := agent[Player], FortChar := Agent.GetFortCharacter[], Trans := FortChar.GetTransform(), Position := Trans.Translation):
set MoveToPosition = vector2{X := Position.X, Y := Position.Y}
SpiderTrans := Spider.GetTransform()
SpiderVec := SpiderTrans.Translation
CurrentSpiderRotation := SpiderTrans.Rotation
CurrentSpiderPos := vector2{X := SpiderVec.X, Y := SpiderVec.Y}
DeltaSpeed := SpiderSpeed * DeltaTime
NewPos := Lerp(CurrentSpiderPos, MoveToPosition, DeltaSpeed)
FinalMoveVector := vector3{X := NewPos.X, Y := NewPos.Y, Z := SpiderVec.Z}
# This is where my rotation gets wonky
DP := DotProduct(CurrentSpiderPos, MoveToPosition)
var NewRotation : rotation = CurrentSpiderRotation.ApplyLocalRotationZ(DP)
if (set NewRotation = Slerp[CurrentSpiderRotation,NewRotation, SpiderSpeed]) {}
# Movement works fine, but rotation is all over the place
if (Spider.TeleportTo[FinalMoveVector, NewRotation]) {}
Получите векторы положения и вычтите их.
Вы получите вектор, указывающий от B к A, нормализуйте его и используйте в качестве места назначения вращения.
Редактировать: обратите внимание, что величина вектора перед нормализацией будет представлять расстояние, поэтому не нормализуйте его, если по какой-то причине вы этого хотите.