0

我正在尝试在Expression 2中插入角度,例如:

local IAng_ = mix( Begin, End, 0.0-1.0 )

mix( v/a, v/a, n )是一个线性插值函数,(可能)最容易描述为:

function angle mix( Begin:angle, End:angle, Amount:number ){
    return Begin * Amount + End * (1 - Amount)
}

问题是:3D 角度范围是 -180 到 180,这会导致一些故障。(据我朋友说,这与云台锁有关。

我尝试了几件事,但由于 Source Engine 中角度的性质,这些都没有奏效:

function angle angle:to360(){
    local Absolute = ang( abs( This:pitch() ), abs( This:yaw() ), abs( This:roll() ) )
    local Pitch = This:pitch() < 0 ? Absolute:pitch() + 180 : Absolute:pitch()
    local Yaw = This:yaw() < 0 ? Absolute:yaw() + 180 : Absolute:yaw()   
    local Roll = This:roll() < 0 ? Absolute:roll() + 180 : Absolute:roll()

    return ang( Pitch, Yaw, Roll ) 
}

或将角度增加 180。

TL;DR面临云台锁定问题的 3D 角度插值(角度范围 -180 到 180),最好的解决方案是具有转换为 0 - 360 范围并返回到 -180 - 180 的功能。

4

1 回答 1

0

我最终使用该quat( angle )函数将角度转换为四元数,然后使用内置的 slerp(球面线性插值)函数,如下所示:

local Ang = slerp( quat( Angle1 ), quat( Angle2 ), Interp ):toAngle()
于 2015-12-14T17:32:53.037 回答