Перейти к контенту

[SoC] Ковыряемся в файлах


Рекомендуемые сообщения

malandrinus

как сделать проверку на то что объект попадает в заданный конус взгляда я толком не знаю.

в общем попробовал для начала получить угол между линией до объекта и линией взгляда эктора(точнее камеры)

сделал так:

 

--вычитаем из конечной точки начальную - получаем луч вектора  от камеры до объекта
local ray =obj:position():sub(device().cam_pos)  

согласно теоремам математики скалярное произведение векторов равно произведению их длин на косинус угла между ними
Т.о. чтобы вычислить угол нужно иметь в наличие скалярное произведение векторов
     --получаем  его
     local dp=ray:dotproduct(device().cam_dir)

    --получаем  произведение  длин векторов
    local len = ray:magnitude()* device().cam_dir:magnitude()
    
     --получаем косинус угла   --делим  скаляр векторов на  произведение их  длин 
   local cosinus = dp/len

--инвертируем косинус угла  в реальный угол через аркосинус  -  и сразу переводим радианы в градусы 
                local angle = math.acos(cosinus)*57

 

Результат - вроде выдается угол. Но только не совсем точный (+-5-7 градусов). Я подозреваю, что надо позицию камеры заменить на позицию эктора.

В общем если где ошибся то поправь пожалуйста - я с математикой не очень :ny_unsure:

Или все проще можно сделать?

 

Понятно. Я значит велосипед изобретал - столько раз вроде заглядывал в G скрипт а этих функций не приметил. :ny_smile:

Ну что ж попробуем их использовать.

Изменено пользователем Garry_Galler
Ссылка на комментарий

Garry_Galler,

для всего описанного ещё со времён ТЧ в модуле _G есть готовые функции (примерно тоже самое, что ты написал):

yaw_degree3d(v1, v2) - выдаёт угод в градусах между двумя векторами (чистый конус)

yaw_degree(v1, v2) - выдаёт угод в градусах между проекциями двух векторов на горизонтальную плоскость (полагаю в данном случае даже более полезно)

yaw(v1, v2) - аналогично предыдущей, но в радианах

Кстати, эти функции наглядно показывают, что авторы оригинальных скриптов на момент их написания не знали, как пользоваться классом vector. С использованием методов класса vector эти функции можно переписать короче и работать будут раза в три быстрее.

 

  Цитата
device().cam_dir:magnitude()
длина этого вектора и так единица. magnitude можно не использовать

 

 

Направление камеры по любому точнее, чем направление актора.

Изменено пользователем malandrinus
  Полезный утиль (Показать)
Ссылка на комментарий

всем привет! Народ, вот я так и не нашел урок по добавлению нового видео в сталкера. Ну то есть чтоб все подробно описывалось, как правильно конвертировать, как добавлять и т.д.

Есть у кого ссылка на такой урок?

Thank you for your honesty.

Now fuck off and die.

Ссылка на комментарий
SCRIPT Создание Видеофайлов для игры S.T.A.L.K.E.R.. Но у меня не получилось. Не нашёл в конверторе Theora FOURCC – THEO, хотя кодеки все свежие и конвертор VirtualDubMod. Может у тебя выйдет. Изменено пользователем Starter

ЯДиск папка с крутым схроном!

Ссылка на комментарий

malandrinus

посмотрел я функции из G - да действительно разрабы использовали обычные методы математики. Скалярное произведение считается по обычной формуле. И модуль(длина) каждого вектора вычисляется по стандартной формуле как квадратный корень из сумм квадратов соответствующих координат. Причем ось y для угла проекции двух векторов на плоскость земли не учитывается – (вот из за нее то и неточность видимо у меня - так как при смещении камеры к ногам объекта - значение выравнивается почти к нулю - как и должно).

Значит при моем способе - использующем методы класса вектор все быстрее работает? :ny_wink:

 

Кстати сегодня пока рылся в инете (поднимая свои школьные знания по математике в области векторов) наткнулся на одну интересную статью по

алгоритму отслеживания столкновений с препятствиями в игровых движках. Там упоминался метод основанный на октодереве - интересно а в сталкере какой алгоритм реализован...

Изменено пользователем Garry_Galler
Ссылка на комментарий

Garry_Galler,

здесь вопрос не неточности, а скорее что хотим получить. Если измерять угол от точки взгляда, то это истинный конус взгляда выходит. Но при этом в него могут не попасть объекты рядом с ГГ и в упор не будет виден кто-либо, стоящий прямо перед ГГ (поскольку его координаты - это положение на земле). Поэтому более осмысленной будет функция yaw_degree, которая игнорирует координату y.

Между прочим, всё равно будет проблема с объектами слева и справа от "полупространства взгляда", поскольку ближе к ГГ оно сужается. Поэтому имеет смысл ближе определённого расстояния проверять на больший угол видимости. Или вообще-то стоит просто использовать угол обзора, полученный из разрешения монитора и fov камеры.

 

  Цитата
Значит при моем способе - использующем методы класса вектор все быстрее работает? :ny_wink:

А ты проверь. Возьми класс profile_timer и замеряй время.

 

  Цитата
Там упоминался метод основанный на октодереве - интересно а в сталкере какой алгоритм реализован...

Для физики не знаю, а при движении по AI сетке - никакой. Ну может только проверяется, что узел сетки кем-то занят и то не всегда. Известно же, что неписи ГГ зачастую игнорируют и сквозь стенки ходят и по воздуху гуляют.

  Полезный утиль (Показать)
Ссылка на комментарий

Увидел в статье по созданию видео насчёт кодека (что нужен не свежий, а старый) всё пошло смог увидить эти Theora FOURCC – THEO, настроил, сконвертировал, открываю файл, пишет не может воспроизвести. Сунул в игру вылет сразу же с таким логом

Expression    : fatal error
Function      : CTexture::Load
File          : E:\stalker\sources\trunk\xr_3da\SH_Texture.cpp
Line          : 181
Description   : <no expression>
Arguments     : Can't open video stream

 

Подскажите что делать? В чём ошибка?

Изменено пользователем Starter

ЯДиск папка с крутым схроном!

Ссылка на комментарий
  Цитата
Подскажите, а чем может быть вызвана вот такая ошибка?

 

Expression    : fatal error
Function      : CScriptEngine::lua_error
File          : E:\stalker\patch_1_0004\xr_3da\xrGame\script_engine.cpp
Line          : 73
Description   : <no expression>
Arguments     : LUA error: ...ль желанийguygu\gamedata\scripts\bind_stalker.script:244: attempt to index global 'srs' (a nil value)

 

Неужели никто не знает, что это за ошибка?

 

Starter У тебя настройки кажись неправильные

 

Изменено пользователем STARTS

 

Ссылка на комментарий

всем привет. вот пытался рандомно выводить сообщения (через 5 минут)

 

и в начале игры вылет:

 

Expression    : fatal error
Function      : CScriptEngine::lua_error
File          : E:\stalker\patch_1_0004\xr_3da\xrGame\script_engine.cpp
Line          : 73
Description   : <no expression>
Arguments     : LUA error: ...g\s.t.a.l.k.e.r\gamedata\scripts\bind_stalker.script:211: attempt to perform arithmetic on global 'last_time' (a nil value)

 

  содержание эктор_биндера: (Показать)

Thank you for your honesty.

Now fuck off and die.

Ссылка на комментарий

Подскажите чем может быть вызван вылет:

Expression : fatal error

Function : CScriptEngine::lua_error

File : E:\stalker\patch_1_0004\xr_3da\xrGame\script_engine.cpp

Line : 73

Description : <no expression>

Arguments : LUA error: c:\s.t.a.l.k.e.r\gamedata\scripts\dialogs.script:34: attempt to index field '?' (a nil value)

Freedom

Ссылка на комментарий

Прошу помощи в адаптации мода артефакт для воскрешения любого НПСа к моду OGSE.

Первичную интеграцию (system.ltx и bind_stalker.script) я провел сам.

При попытке воскресить непись (помещении арта в инвентарь трупа) получаю такой вылет:

  Цитата
Expression : fatal error

Function : CScriptEngine::lua_error

File : E:\stalker\sources\trunk\xr_3da\xrGame\script_engine.cpp

Line : 73

Description : <no expression>

Arguments : LUA error: g:\stalker\soc\gamedata\scripts\ressurect.script:31: attempt to index field 'convert_npc' (a nil value)

Мод точно работает с АМК (и НС то же).

ressurect.script

 

Заранее спасибо :)

Ссылка на комментарий

8push5 Да не, файл есть, и то что в нём находится, тоже кажись без ошибок

 

  Содержание srs.script (Показать)
Изменено пользователем STARTS

 

Ссылка на комментарий
STARTS,
Checking .../new  2.script:
new  2.script (14): mismatched input 'local' expecting ')'
Found 1 errors.

Vita sine libertate, nihil

Vita sine litteris - mors est

Ссылка на комментарий

STARTS,

  Верный код (Показать)

i-igroman.ru - Мой, принципиально новый сайт о компьютерных играх

Ссылка на комментарий

Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий

Комментарии могут оставлять только зарегистрированные пользователи

Создать аккаунт

Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!

Зарегистрировать новый аккаунт

Войти

Есть аккаунт? Войти.

Войти
×
×
  • Создать...