AMX MOD X
Вторник, 06.01.2026, 14:25:00



Приветствую Вас Гость | RSS
[ Главная ] [ Координаты точки перед глазами - AMX Mod X Форум ] [ Регистрация ] [ Вход ]
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]

Вниманию участников! Данный форум теперь является архивом и вскором времени здесь нельзя будет создавать новых тем! Просьба всем для общения и создания новых тем перейти на наш новый форум: http://amxmodx.su/

  • Страница 1 из 1
  • 1
Модератор форума: slogic, AlMod  
Координаты точки перед глазами
draftДата: Понедельник, 30.06.2008, 04:02:33 | Сообщение # 1
Полковник
Группа: Пользователи
Сообщений: 225
Репутация: 3
Статус: Не в сети
В общем, необходимо постоянно расчитывать координаты точки перед глазами. Использую traceline_forward, но никак не могу понять, как реализовать эту простейшую математику. Отдаление от глаз должно быть примерно 35 единиц, помогите плз!
 
DaTaДата: Понедельник, 30.06.2008, 11:55:44 | Сообщение # 2
Генерал-полковник
Группа: Cупер-модеры
Сообщений: 1025
Репутация: 16
Статус: Не в сети
Прежде всего обрати внимание на атрибуты v_angle, view_ofs, origin ( http://amxmodx.ucoz.ru/forum/8-50-1 )

view_ofs - положение позиции глаз игрока относительно начала координат модели игрока(origin)
прибавляет origin + view_ofs = получаем точку в пространстве, с которой игрок смотрит.

Теперь нам нужно отойти на 35u от точки взгляда в сторону взгляда
Направление взгляда можно получить с атрибута v_angle, но оно в градусах. Для перевода из градусов в единичный вектор существует функция в движке EngFunc_MakeVectors, которая принимает 3х мерный массив "углов" и записывает соответствующий вектор прямого направления в globalvars_t::v_forward.

Прибавляем вектор взгляда длинной в 35u к положению глаз игрока относительно начала пространства
(origin + view_ofs) + (v_forward * 35) получаем точку, которая расположена через 35u перед игроком.

Итак, на Pawn+amxx это выглядит так(для наглядности не оптимизировано):

Code

static Float:origin[3], Float:view_ofs[3]
pev(id, pev_origin, origin)
pev(id, pev_view_ofs, view_ofs)

static Float:view_pos[3]
view_pos[0] = origin[0] + view_ofs[0]
view_pos[1] = origin[1] + view_ofs[1]
view_pos[2] = origin[2] + view_ofs[2]

static Float:v_angle[3]
pev(id, pev_v_angle, v_angle)

engfunc(EngFunc_MakeVectors, v_angle)

static Float:v_vector[3]
global_get(glb_v_forward, v_vector)

static Float:forward_origin[3]
forward_origin[0] = view_pos[0] + 35.0 * v_vector[0]
forward_origin[1] = view_pos[1] + 35.0 * v_vector[1]
forward_origin[2] = view_pos[2] + 35.0 * v_vector[2]

//view_pos[] - точка, откуда игрок смотрит
//forward_origin[] - точка через 35u от взгляда игрока

(материал частично с VEN's fakemeta_utils, fm_get_aim_origin)

 
draftДата: Понедельник, 30.06.2008, 15:22:51 | Сообщение # 3
Полковник
Группа: Пользователи
Сообщений: 225
Репутация: 3
Статус: Не в сети
Огромное спасибо, но столкнулся теперь с проблемой:
При движении модель отстаёт, и игрок как бы проходит всё время сквозь текстуру, как это можно правильно решить? Всё это происходит в prethink. Может, следует использовать postthink?


Сообщение отредактировал draft - Понедельник, 30.06.2008, 15:31:25
 
DaTaДата: Понедельник, 30.06.2008, 17:54:43 | Сообщение # 4
Генерал-полковник
Группа: Cупер-модеры
Сообщений: 1025
Репутация: 16
Статус: Не в сети
Чесно говоря, даже не знаю истину %)

Вот мое мнение:
если ты пытаешься поставить модель или еще что перед игроком(типо Hud), то у тебя оно толково не выйдет, из-за задержки передачи данных в сети и ограничений, наложенных движком. Т.е. клиент будет реже обновлять положение модели, чем хотелось бы

Возможно поможет атач ентити (пример http://forums.alliedmods.net/showthread.php?p=507822 ), но я сомневаюсь.

 
  • Страница 1 из 1
  • 1
Поиск:

AMX Mod X Russian Community © 2006-2026