Просмотр полной версии : [Вопрос] Полет камеры к актеру.
Представим ситуацию. Я подошел к актеру, нажал на F(это пример) и камера сдвинулась так, что бы видно было только лицо и руки актера. Натолкните, пожалуйста, на решения проблемы.
Проверка расстояния до актёра + InterpolateCameraPos/InterpolateCameraLookAt?
Если актёры всегда на месте стоят и знания тригонометрии не позволяют, можно координаты вручную подобрать легко.
Проверка расстояния до актёра + InterpolateCameraPos/InterpolateCameraLookAt?
Если актёры всегда на месте стоят и знания тригонометрии не позволяют, можно координаты вручную подобрать легко.
Актер стоит. Знания тригонометрии на нуле(именно в программировании, в жизни вроде нормально). C подбором координат надо будет день убить...
Актер стоит. Знания тригонометрии на нуле(именно в программировании, в жизни вроде нормально). C подбором координат надо будет день убить...
А тригонометрия в программировании как-то отличается от тригонометрии в жизни?
Ну так узнавай в каком направлении смотрит актёр через GetPlayerCameraFrontVector и выссчитывай положение для камеры
А тригонометрия в программировании как-то отличается от тригонометрии в жизни?
Ну так узнавай в каком направлении смотрит актёр через GetPlayerCameraFrontVector и выссчитывай положение для камеры
Может будет проще через GetActorPos/GetPlayerPos? Камера смотрит в центр актера и чуть вперед актера даже если я поставлю -10, -20, -30.
GetActorPos(Actor[1], a_x, a_y, a_z);
GetPlayerPos(playerid, p_x, p_y, p_z);
InterpolateCameraPos(playerid, p_x, p_y, p_z, a_x, a_y, a_z, 1000);
InterpolateCameraLookAt(playerid, p_x, p_y, p_z, a_x, a_y-50, a_z, 1000);
Может будет проще через GetActorPos/GetPlayerPos? Камера смотрит в центр актера и чуть вперед актера даже если я поставлю -10, -20, -30.
GetActorPos(Actor[1], a_x, a_y, a_z);
GetPlayerPos(playerid, p_x, p_y, p_z);
InterpolateCameraPos(playerid, p_x, p_y, p_z, a_x, a_y, a_z, 1000);
InterpolateCameraLookAt(playerid, p_x, p_y, p_z, a_x, a_y-50, a_z, 1000);
z координату нужно менять.
http://imgur.com/RFbuGU5
Поменял..
- - - Добавлено - - -
a_y-180, a_z+10
не поставлю y - смотрит влево.
Ну так подбери правильные смещения для координат и будет тебе счастье.
CMD:cam(playerid, params[])
{
new
Float:cam_pos_x,
Float:cam_pos_y,
Float:cam_pos_z;
sscanf(params, "p<,>F(0.0)F(0.0)F(0.0)", cam_pos_x, cam_pos_y, cam_pos_z);
GetActorPos(Actor[1], a_x, a_y, a_z);
GetPlayerPos(playerid, p_x, p_y, p_z);
InterpolateCameraPos(playerid, p_x, p_y, p_z, a_x, a_y, a_z, 1000);
InterpolateCameraLookAt(playerid, p_x, p_y, p_z, a_x+cam_pos_x, a_y+cam_pos_y, a_z+cam_pos_z, 1000);
}
И прямо в игре играйся с координатами
Попробуем поиграться.
UPD:не добился нужного результата
Есть еще варианты?
stock CameraToActor
(playerid, Float:px, Float:py, Float:pz, Float:ax, Float:ay, Float:az, Float:angle,time = 1000)
{
new
Float:fy,
Float:fz;
fy = ay - floatsin(angle, degrees);
fz = az + floatcos(angle, degrees);
InterpolateCameraPos(playerid, px, py, pz, ax, ay, az, time);
InterpolateCameraLookAt(playerid, px, py, pz, ax, ay-fy, az+fz, time);
return true;
}
Что не так сделал? Help...
Nexius_Tailer
10.12.2016, 16:04
Есть еще варианты?
stock CameraToActor
(playerid, Float:px, Float:py, Float:pz, Float:ax, Float:ay, Float:az, Float:angle,time = 1000)
{
new
Float:fy,
Float:fz;
fy = ay - floatsin(angle, degrees);
fz = az + floatcos(angle, degrees);
InterpolateCameraPos(playerid, px, py, pz, ax, ay, az, time);
InterpolateCameraLookAt(playerid, px, py, pz, ax, ay-fy, az+fz, time);
return true;
}
Что не так сделал? Help...
Попробуй вот так:
stock CameraToActor(playerid, Float:px, Float:py, Float:pz, Float:ax, Float:ay, Float:az, Float:angle, time = 1000)
{
new Float:fx, Float:fy;
fx = ax - (2.0 * floatsin(-angle, degrees)); //2.0 - расстояние камеры от актёра, скорее всего с ним стоит поиграться
fy = ay - (2.0 * floatcos(-angle, degrees)); //Тоже самое
InterpolateCameraPos(playerid, px, py, pz, fx, fy, az, time);
InterpolateCameraLookAt(playerid, px, py, pz, ax, ay, az, time);
return 1;
}
Не проверял
Работает! Практически так как надо.
http://imgur.com/a/mUvq3
1 скрин - твой скрипт + координата z;
2 скрин - как бы хотелось, возможно так реализовать?
Вчера пробовал вариант с cameditor'ом, что бы с помощью его вычесть конечную координату камеры, но почему то в виртуальном не работает.
Nexius_Tailer
10.12.2016, 18:59
Работает! Практически так как надо.
http://imgur.com/a/mUvq3
1 скрин - твой скрипт + координата z;
2 скрин - как бы хотелось, возможно так реализовать?
Вчера пробовал вариант с cameditor'ом, что бы с помощью его вычесть конечную координату камеры, но почему то в виртуальном не работает.
Ты скорее всего не ту координату z меняешь.
Пробуй вот так:
stock CameraToActor(playerid, Float:px, Float:py, Float:pz, Float:ax, Float:ay, Float:az, Float:angle, time = 1000)
{
new Float:fx, Float:fy;
fx = ax - (2.0 * floatsin(-angle, degrees)); //2.0 - расстояние камеры от актёра, скорее всего с ним стоит поиграться
fy = ay - (2.0 * floatcos(-angle, degrees)); //Тоже самое
InterpolateCameraPos(playerid, px, py, pz, fx, fy, az + 0.5, time); //То место, (!)откуда(!) игрок будет смотреть
InterpolateCameraLookAt(playerid, px, py, pz, ax, ay, az, time); //То место, (!)куда(!) игрок будет смотреть
return 1;
}
Там, где стоит 0.5, попробуй также немного изменять если что
Камера смотрит вниз.
Если не выйдет сдвинуть камеру как показано на втором скрине, то ничего страшного. Меня устраивает и камера на первом скрине.
Nexius_Tailer
10.12.2016, 19:15
Ну так я ж говорю, поизменяй значение 0.5, например, на 0.3 или 0.1, или вовсе увеличь. Траектория, насколько видно, правильная, дело за малым.
Всем спасибо. Проблема решена.
Powered by vBulletin® Version 4.2.0 Copyright © 2024 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot