onSendPlayerSync quaternion

chiteroloco

Новичок
Автор темы
3
2
Версия SA-MP
  1. 0.3.7 (R1)
помогите с кватернионами в SendPlayerSync

я хочу, чтобы мой игрок смотрел на другого игрока по оси Y (data.quaternion[3]) на основе моей и его позиции, есть идеи, как это сделать?
 

kuzheren

Известный
428
204
тебе нужно сначала иметь две координаты - коорду твоего перса и коорду цели (xyz), после по специальной формуле найти угол между двумя векторами по оси y. Далее нужно превратить углы эйлера (в которых 3 значения xyz от -180 до 180) в кватернион (у которого 4 значения xyzw от -1.0 до 1.0) и отправить его. тут ещё надо знать на ракбот тебе надо сделать или на гта
 
  • Вау
Реакции: 1NEXPL1CA

chiteroloco

Новичок
Автор темы
3
2
тебе нужно сначала иметь две координаты - коорду твоего перса и коорду цели (xyz), после по специальной формуле найти угол между двумя векторами по оси y. Далее нужно превратить углы эйлера (в которых 3 значения xyz от -180 до 180) в кватернион (у которого 4 значения xyzw от -1.0 до 1.0) и отправить его. тут ещё надо знать на ракбот тебе надо сделать или на гта
Lua:
function eulerToQuaternion(position, target)
    local deltaX = target.x - position.x
    local deltaY = target.y - position.y
    local deltaZ = target.z - position.z

    local angleY = math.atan2(deltaX, deltaZ) * (180 / math.pi)
    local halfAngle = angleY * 0.5
    local angleRad = halfAngle * (math.pi / 180)
   
    local sinAngle = math.sin(angleRad)
    local cosAngle = math.cos(angleRad)
   
    local quaternion = {}
    quaternion.x = 0
    quaternion.y = sinAngle
    quaternion.z = 0
    quaternion.w = cosAngle
   
    return quaternion
end

I use this feature and I use sampevents to change the quats on playersync
it does not work for as intended, it is aiming elsewhere
 
Последнее редактирование:
  • Нравится
Реакции: 1NEXPL1CA и Z3roKwq

kuzheren

Известный
428
204
Lua:
function eulerToQuaternion(position, target)
    local deltaX = target.x - position.x
    local deltaY = target.y - position.y
    local deltaZ = target.z - position.z

    local angleY = math.atan2(deltaX, deltaZ) * (180 / math.pi)
    local halfAngle = angleY * 0.5
    local angleRad = halfAngle * (math.pi / 180)
 
    local sinAngle = math.sin(angleRad)
    local cosAngle = math.cos(angleRad)
 
    local quaternion = {}
    quaternion.x = 0
    quaternion.y = sinAngle
    quaternion.z = 0
    quaternion.w = cosAngle
 
    return quaternion
end

I use this feature and I use sampevents to change the quats on playersync
it does not work for as intended, it is aiming elsewhere
С кватернионами в гта часто есть проблемы, возможно ты поменял местами x и w или перепутал что-то другое, либо взял вообще неподходящую формулу, потому-что x и z значения у тебя всегда равны 0.
Если вообще не получается, попробуй setCharHeading(Ped ped, float angle) к тем кого хочешь нацелить на себя