我有兩個Vec3s,Camera Forward和Turret Forward。這兩種載體都在不同的飛機上,其中「攝像機前進」基於自由視角攝像機,「炮塔前進」由其所在的坦克決定,坦克開啓的地形等。塔塔向上和攝像頭向上幾乎不會比賽。在2D平面上旋轉3D矢量
我的問題如下:我希望炮塔能夠以固定的速度(每秒44度)旋轉,以便它始終與照相機指向的方向會聚。如果坦克處於一個奇怪的角度,它不能與相機會聚,它應該找到最近的地方並坐在那裏,而不是無限期地抖動。
我不能爲我的生活似乎解決了這個問題。我嘗試了幾種我在網上發現的方法,總是會產生奇怪的結果。
local forward = player.direction:rotate(player.turret, player.up)
local side = forward:cross(player.up)
local projection = self.camera.direction:dot(forward) * forward + self.camera.direction:dot(side) * side
local angle = math.atan2(forward.y, forward.x) - math.atan2(projection.y, projection.x)
if angle ~= 0 then
local dt = love.timer.getDelta()
if angle <= turret_speed * dt then
player.turret_velocity = turret_speed
elseif angle >= -turret_speed * dt then
player.turret_velocity = -turret_speed
else
player.turret_velocity = 0
player.turret = player.turret + angle
end
end