Void_VR Опубликовано: 21 февраля 2020 Опубликовано: 21 февраля 2020 2 часа назад, 154_Viktor сказал: Подскажите ,как настроить кривые чтобы были максимально похожие на трекир. Были очень резкие , методом тыка пока не могу нормально настроить. так в опентреке же есть кривые. Добавляй там сколько угодно точек, смещай как хочешь, все работает 2 часа назад, 72AG_Olega сказал: после того как я включил UAC (для тестирования): UAC? Дома? Так себе идея. Проще создать в винде доп юзера, для которого включен UAC, а для игр - свой юзер и профиль
72AG_Olega Опубликовано: 21 февраля 2020 Автор Опубликовано: 21 февраля 2020 1 час назад, =SF=Thresher сказал: Повторюсь - UAC отключен. С ним не проверял. Не, мне видео нужно делать именно для когда UAC включен, тогда будет спектр на все случаи (когда UAC отключен и так всё понятно) 1 час назад, 72AGs_miky сказал: Извиняюсь за нубский вопрос, а как все правильно прикрыть (вручную)? Я просто убиваю крестиком, кто то там просит что то подтвердить, я подтверждаю. Это правильно? Да, правильно. Можно программы-участники АОМ закрывать вообще в любом порядке. 33 минуты назад, Void сказал: UAC? Дома? Так себе идея. Проще создать в винде доп юзера, для которого включен UAC, а для игр - свой юзер и профиль Ну, не все же такие как мы, которые этот UAC отключаем... Надо и о других подумать, которые с ним и живут...?
Void_VR Опубликовано: 21 февраля 2020 Опубликовано: 21 февраля 2020 56 минут назад, 72AG_Olega сказал: Ну, не все же такие как мы, которые этот UAC отключаем... Надо и о других подумать, которые с ним и живут...? http://www.oszone.net/10594#400
72AG_Olega Опубликовано: 21 февраля 2020 Автор Опубликовано: 21 февраля 2020 41 минуту назад, Void сказал: http://www.oszone.net/10594#400 Понял, спасибо. Остановимся на том, что пользователь и есть администратор, но у него всё же включен UAC. 1
Ahtuba Опубликовано: 21 февраля 2020 Опубликовано: 21 февраля 2020 3 часа назад, 72AGs_miky сказал: Извиняюсь за нубский вопрос, а как все правильно прикрыть (вручную)? Я просто убиваю крестиком, кто то там просит что то подтвердить, я подтверждаю. Это правильно? Этого достаточно. 1
Oraclenok Опубликовано: 21 февраля 2020 Опубликовано: 21 февраля 2020 10 часов назад, 72AG_Olega сказал: При запуске стала появляться консоль Питона, которая после автозапуска АОМ остается в развёрнутом состоянии на экране. Как её свернуть или убрать в трей? Для сворачивания используется ключ /MIN. Попробуй так: start /D %OPENTRACK_DIR% /MIN "" %OPENTRACK_FILE% 1
=SF=Thresher Опубликовано: 21 февраля 2020 Опубликовано: 21 февраля 2020 8 часов назад, 154_Viktor сказал: Подскажите ,как настроить кривые чтобы были максимально похожие на трекир. Были очень резкие , методом тыка пока не могу нормально настроить. Уточни - какие именно кривые надо настроить? Скорость поворота головы, мертвую зону или...? Тут же такое дело: "максимально похоже на трекир" у каждого может быть свое. Это своего рода "Сделайте мне хорошо". Вот у меня, например, не то, чтобы похоже, а стало еще лучше, чем было с чистым трекиром. Кривые были настроены "под себя". Сейчас настроены так, как рекомендовали в видео. Ну, почти так. У меня Трекир4, он работает немного не "как Трекир5". Я это знаю. Поэтому и кривые подкрутил немного в самом трекире, а не в опентреке.
Oraclenok Опубликовано: 21 февраля 2020 Опубликовано: 21 февраля 2020 start /D %PYTHON_DIR% /MIN "" python -m %PYTHON_SCRIPT% 10 часов назад, 72AG_Olega сказал: Правда целесообразность автосмещений по X я поставил под серьёзный вопрос. Ось Х и так хорошо работает. А для меня автоматическое смещение по Х - обязательно. Я ещё планирую сделать перенос нажатием кнопки взгляда назад без поворота головы. И не только назад. 1
Void_VR Опубликовано: 21 февраля 2020 Опубликовано: 21 февраля 2020 13 минут назад, oraclenok сказал: Я ещё планирую сделать перенос нажатием кнопки взгляда назад без поворота головы. И не только назад. давно забинден такой вид, но через средства игры
Oraclenok Опубликовано: 21 февраля 2020 Опубликовано: 21 февраля 2020 У меня тоже есть настроенный быстрый взгляд. Но это меня не устраивает, так как в нем не работают смещения и приближение. Я хочу смотреть назад также, как и вперёд, но не поорачивая головы. 1 1
=SF=Thresher Опубликовано: 21 февраля 2020 Опубликовано: 21 февраля 2020 (изменено) 44 минуты назад, oraclenok сказал: start /D %PYTHON_DIR% /MIN "" python -m %PYTHON_SCRIPT% ..... Спасибо! Красота!!! =============== start /D %TRACKIR_DIR% /MIN "" %TRACKIR_FILE% - работает TIMEOUT 4 start /D %GLOVEPIE_DIR% "" PIEFree.exe -%GLOVEPIE_SCRIPT% - вот этот бы заставить свернуться. Не поддается он на /MIN TIMEOUT 2 start /D %PYTHON_DIR% /MIN "Python's server" python -m %PYTHON_SCRIPT% - работает TIMEOUT 2 start /D %OPENTRACK_DIR% "" %OPENTRACK_FILE% - мне надо оставить развернутый: я так и не смог под семеркой заставить Ил-2 увидеть данные от опентрека, запущенного автоматом по захвату игры. Приходится жать его запуск вручную. Но меня такой вариант устраивает. ============== Штатный режим трекира можно определить по светодиодам, работу Питона можно вычислить после нажатия кнопки "Запустить" в опентреке - по осьминожке. Вот бы еще свернуть GlovePIE и все было бы в ажуре. Только одного опентрека пнуть вручную и можно играть. Внимание, вопрос: как свернуть GlovePIE? Нашел!!! C GlovePIE вопрос снят! Оказывается есть ключик у самой программы /tray = start minimized to system tray start /D %GLOVEPIE_DIR% "" PIEFree.exe /tray -%GLOVEPIE_SCRIPT% Все получилось. При запуске АОМ вижу только окно открытого опентрека для его запуска. Остальное свернуто и работает. Изменено 21 февраля 2020 пользователем =SF=Thresher 1
72AG_Olega Опубликовано: 21 февраля 2020 Автор Опубликовано: 21 февраля 2020 (изменено) 1 час назад, oraclenok сказал: start /D %PYTHON_DIR% /MIN "" python -m %PYTHON_SCRIPT% А для меня автоматическое смещение по Х - обязательно. Я ещё планирую сделать перенос нажатием кнопки взгляда назад без поворота головы. И не только назад. Я уже всё попробовал и сделал. Придется добавить ось X в автосмещения, раз это для некоторых интересно...Твои коэффициенты по осям выше весьма неплохи... 1 час назад, oraclenok сказал: У меня тоже есть настроенный быстрый взгляд. Но это меня не устраивает, так как в нем не работают смещения и приближение. ЗЫ. Да, теперь всё можно сделать в АОМ, и для каждого самолёта в БзС настраивать не придется... Но я в проектировании остановился на двух видах на шесть (настроить нужно только с одной стороны, второй автоматом вылазит). Остальные виды как таковые не нужны, для этого всё же голова есть.... Избыток кнопок в обзоре тоже не есть хорошо, особенно для истребителя... В выходные постараюсь всё-же запилить видео. 48 минут назад, =SF=Thresher сказал: start /D %GLOVEPIE_DIR% "" PIEFree.exe -%GLOVEPIE_SCRIPT% - вот этот бы заставить свернуться. Не поддается он на /MIN start /D %GLOVEPIE_DIR% "" PIEFree.exe -%GLOVEPIE_SCRIPT% /tray - угу, а я в конце дописал, тоже работает 1 час назад, oraclenok сказал: Для сворачивания используется ключ /MIN. Попробуй так: Спасибо получилось. Изменено 21 февраля 2020 пользователем 72AG_Olega
Oraclenok Опубликовано: 21 февраля 2020 Опубликовано: 21 февраля 2020 18 минут назад, 72AG_Olega сказал: Остальные виды как таковые не нужны, для этого всё же голова есть Мне нужен взгляд вверх, чтобы не задирать голову в бою. Также я задумываюсь над процедурой поиска противника в спокойном полёте, когда взгляд последовательно перемещается по определённым секторам.
72AG_Olega Опубликовано: 21 февраля 2020 Автор Опубликовано: 21 февраля 2020 Только что, oraclenok сказал: Также я задумываюсь над процедурой поиска противника в спокойном полёте, когда взгляд последовательно перемещается по определённым секторам. Это больше годится для обучалки. Но сделать можо и легко, вот только надо ли...
Oraclenok Опубликовано: 21 февраля 2020 Опубликовано: 21 февраля 2020 Мне надо, так как я старый и ленивый
Void_VR Опубликовано: 21 февраля 2020 Опубликовано: 21 февраля 2020 59 минут назад, oraclenok сказал: когда взгляд последовательно перемещается по определённым секторам. и при обнаружении противника включалось самонаведение и огневое поражение ? ) 2
Oraclenok Опубликовано: 21 февраля 2020 Опубликовано: 21 февраля 2020 Желательно, чтобы издавался звуковой сигнал с сообщением свой-чужой, но пока это не достижимо.
72AG_Olega Опубликовано: 24 февраля 2020 Автор Опубликовано: 24 февраля 2020 Текущий код для автоматических и ручных смещений (под спойлером). Специально для oraclenok и других, кто разбирается Скрытый текст if starting then PIE.FrameRate = 250 ; частота выполнения скрипта, должна быть равна или выше частоты камеры TrackIR5 (т.е 120 Гц и выше) debug = '0:' + joystick0.Name + ', 1:' + joystick1.Name + ', 2:' + joystick2.Name + ', 3:' + joystick3.Name + ', 4:' + joystick4.Name //-----Текущие номера джойстиков (в случае переназначения их ID операционной системой, необходимо поменять номера джойстиков во всём коде) ;0: VKB-Sim Gunfighter Modern Combat Pro ;1: VKB-Sim Gunfighter Modern Combat Pro ;2: PPJoy Virtual Joystick 1 ;3: L3 ;4: Throttle - HOTAS Warthog //=======Пресет смещений и угла для вида на шесть: Истребители======= var.deltaX1 = 1050 // начальный делитель для автоматическое смещение по оси X var.deltaY1 = 3310 // начальный делитель для автоматическое смещение по оси Y var.deltaX2 = 6.7 cm // ручное смещение по оси X var.deltaY2 = 6.7 cm // ручное смещение по оси Y; смещение для вида на шесть var.deltaX3 = 6.7 cm // смещение по оси X для вида на шесть var.deltaY3 = 6.7 cm // смещение по оси Y для вида на шесть var.deltaZ3 = 5 cm // смещение по Z для вида на шесть var.cornerYawSix = 14.16 // угол по Yaw для фиксированного вида на шесть var.autoCorner = 18 // угол по Yaw начала срабатывания автоматических смещений по X и Y в задней полусфере. var.yUpVSyDown = 0.5 // //=======Конец пресета=================================== //---Установка начальных значений логических флагов смещений---------- var.flagDeltaX1 = false // флаг автоматического смещения X1 var.flagDeltaX2 = false // флаг ручного смещения X2 var.flagDeltaX3 = false // флаг смещения X3 для вида на шесть var.flagDeltaY1 = false // флаг автоматического смещения Y1 var.flagDeltaY2 = false // флаг ручного смещения Y2 var.flagDeltaY3 = false // флаг смещения Y3 для вида на шесть var.flagDeltaZ3 = false // флаг смещения Z3 для вида на шесть var.flagScrollLock = false // var.t1 = 200 // время работы таймера, задержка от многократного срабатывания клавиши ScrollLock var.timer1 = 0 Keyboard.RepeatFakeKeys = False end if //=============БЛОКИРОВКА ЦЕНТРОВКИ ВО ВРЕМЯ РАБОТЫ РУЧНЫХ СМЕЩЕНИЙ (Цетровку TrackIR и Opentrack нужно назначить на F7) if joystick0.Button13 = true and joystick4.Button3 = false and joystick0.Button20 = false and joystick0.Button19 = false then key.F7 = true end if if joystick0.Button13 = false then key.F7 = false end if //-------------------- Работа таймеров ---------------------------------------------------------- if var.timer1 < var.t1 then var.timer1 += 1 //работа таймера t1 - для кнопки ScrollLock end if //-------------------- Конец блока таймеров------------------------------------------------------ //==========Блок клавиш настройки смещений======================= //------Рокерный переключатель для ScrollLock--------- if (key.ScrollLock = true and var.timer1 = var.t1 and var.flagScrollLock = false) then var.flagScrollLock = true var.timer1 = 0 end if if (key.ScrollLock = true and var.timer1 = var.t1 and var.flagScrollLock = true) then var.flagScrollLock = false var.timer1 = 0 end if //-----------Назначения действий на клавиши---------- if var.flagScrollLock = true then if End and Shift=false and Alt=false then var.deltaX1 +=1 if Delete and Shift=false and Alt=false then var.deltaX1 -=1 if End +Shift and Alt=false then var.deltaX2 -=0.002 cm if Delete +Shift and Alt=false then var.deltaX2 +=0.002 cm if End +Alt and Shift=false then var.deltaX3 -=0.002 cm if Delete +Alt and Shift=false then var.deltaX3 +=0.002 cm if PageUp and Shift=false and Alt=false then var.deltaY1 -=1 if PageDown and Shift=false and Alt=false then var.deltaY1 +=1 if PageUp +Shift and Alt=false then var.deltaY2 -=0.002 cm if PageDown +Shift and Alt=false then var.deltaY2 +=0.002 cm if PageUp +Alt and Shift=false then var.deltaY3 -=0.002 cm if PageDown +Alt and Shift=false then var.deltaY3 +=0.002 cm if Insert and Shift=false and Alt=false then var.deltaZ3 -=0.1 cm if Home and Shift=false and Alt=false then var.deltaZ3 +=0.1 cm if End +Alt+Shift then var.cornerYawSix +=0.005 if Delete +Alt+Shift then var.cornerYawSix -=0.005 ; var.flagYaxis = false ; var.flagXaxis = false ; var.flagZaxis = false end if //--------Выкл/Вкл осей X, Y, Z, для режима настройки смещений if var.flagScrollLock = false then // ScrollLock не нажата, - оси X, Y, Z включены var.flagYaxis = true var.flagXaxis = true var.flagZaxis = true end if if var.flagScrollLock = true then // ScrollLock нажата, - оси X, Y, Z выключены var.flagYaxis = false var.flagXaxis = false var.flagZaxis = false end if //==========Конец блока клавиш настройки смещений======================= //------вкл/выкл автоматического смещения по Y и X if joystick4.Button18 = true then var.flagAutoX = true end if if joystick4.Button18 = false then var.flagAutoX = false end if if joystick4.Button19 = true then var.flagAutoY = true end if if joystick4.Button19 = false then var.flagAutoY = false end if //-----автоматическое смещение по X и Y при повороте по Yaw больше, чем var.autoCorner --- if (TrackIR1.RealYaw < -var.autoCorner) or (TrackIR1.RealYaw > var.autoCorner) then var.autoX = ((TrackIR1.RealYaw)/var.deltaX1)^5 end if if (TrackIR1.RealYaw < -var.autoCorner) or (TrackIR1.RealYaw > var.autoCorner) then var.autoY = ((TrackIR1.RealYaw)/var.deltaY1)^4 end if if -var.autoCorner < TrackIR1.RealYaw and TrackIR1.RealYaw < var.autoCorner then var.autoX = 0 var.autoY = 0 end if //==============виды на шесть-слева, на шесть справа============================= if joystick4.x = -1 then var.flagYaw = false // отключаем и обнуляем ось Yaw Трекир5 var.corner = -1 * var.cornerYawSix // устанавливаем фиксированный угол на "шесть" var.invert = -1 // инвертируем оси X и Z var.deltaX3 = -1 * |var.deltaX3| // присваиваем нужный знак смещению по X ; var.deltaY3 = |var.deltaY3| // присваиваем смещению по Y на шесть значение ручного смещения var.flagDeltaX3 = true // включаем смещение по X для вида на "шесть" var.flagDeltaY3 = true // включаем смещение по Y для вида на "шесть" var.flagDeltaZ3 = true // включаем максимальное удаление бронеспинки вида на "шесть" end if if joystick4.x = 1 then var.flagYaw = false // отключаем и обнуляем ось Yaw Трекир5 var.corner = 1 * var.cornerYawSix // устанавливаем фиксированный угол на "шесть" var.invert = -1 // инвертируем оси X и Z var.deltaX3 = |var.deltaX3| // присваиваем нужный знак смещению по X ; var.deltaY3 = |var.deltaY3| // присваиваем смещению по Y на шесть значение ручного смещения var.flagDeltaX3 = true // включаем смещение по X для вида на "шесть" var.flagDeltaY3 = true // включаем смещение по Y для вида на "шесть" var.flagDeltaZ3 = true // включаем максимальное удаление бронеспинки вида на "шесть" end if if -1 < joystick4.x < 1 then var.flagYaw = true // включаем ось Yaw Трекир5 var.corner = 0 * var.cornerYawSix// обнуляем фиксированный угол на "шесть" var.invert = 1 // отменяем инвертирование оси X и Z var.flagDeltaX3 = false // выключаем смещение по X для вида на "шесть" var.flagDeltaY3 = false // выключаем смещение по Y для вида на "шесть" var.flagDeltaZ3 = false // выключаем максимальное удаление бронеспинки вида на "шесть" end if //=============конец блока видов на "шесть"======================================= //-----------ручное смещение по X (deltaX)---------------------------------------- if joystick4.Button3 = true and TrackIR1.RealYaw < 0 then var.flagDeltaX2 = true var.deltaX2 = -1 * |var.deltaX2| end if if joystick4.Button3 = true and 0 < TrackIR1.RealYaw then var.flagDeltaX2 = true var.deltaX2 = 1 * |var.deltaX2| end if if joystick4.Button3 = false then var.flagDeltaX2 = false end if //-------------ручное смещение по Y (вверх и вниз)-------------------------------- if joystick0.Button20 = true then var.deltaY = |var.deltaY2| var.flagDeltaY2 = true end if if joystick0.Button19 = true then var.deltaY = -var.yUpVSyDown * |var.deltaY2| var.flagDeltaY2 = true end if if (joystick0.Button20 = false and joystick0.Button19 = false) then var.flagDeltaY2 = false end if //------------------------------------------------------ FakeTrackir.yaw = (TrackIR1.RealYaw in degrees)/10 * int(var.flagYaw)+ var.corner FakeTrackir.pitch = (TrackIR1.RealPitch in radians) FakeTrackir.roll = (TrackIR1.RealRoll in degrees) var.FakeTrackir.x = (TrackIR1.RealX in cm) * int(var.flagYaxis)* var.invert + var.autoX * int(var.flagAutoX)+ var.deltaX2 * int(var.flagDeltaX2) + var.deltaX3 * int(var.flagDeltaX3) var.FakeTrackir.y = (TrackIR1.RealY in cm) * int(var.flagYaxis) + var.autoY * int(var.flagAutoY)+ var.deltaY * int(var.flagDeltaY2) + var.deltaY3 * int(var.flagDeltaY3) var.FakeTrackir.z = (TrackIR1.RealZ in cm) * int(var.flagZaxis)* var.invert + var.deltaZ3 * int(var.flagDeltaZ3) //отправка данных в UDP сервер Python для их переcылки оттуда в Opentrack SendOsc('localhost', 6666, "/glovepie/pithon", FakeTrackir.yaw, FakeTrackir.pitch, FakeTrackir.roll, var.FakeTrackir.x, var.FakeTrackir.y, var.FakeTrackir.z) ;--знаки для копирования в код: | ^ 1 3
72AG_Olega Опубликовано: 24 февраля 2020 Автор Опубликовано: 24 февраля 2020 (изменено) Парни, код закончен, но выпуск видео откладывается еще на неделю. Нужно рисовать пояснительные картинки + я попробую всё же написать оверлей хоть в части вывода на экран онлайн-нажатий клавиш клавиатуры, а то, если без оверлея, потом при монтаже видео запарюсь текстовые вставки с наименованием кнопок накладывать на действия и голос.? Изменено 24 февраля 2020 пользователем 72AG_Olega 1
Void_VR Опубликовано: 24 февраля 2020 Опубликовано: 24 февраля 2020 автоматические смещение проверил - норм работают хочу допилить правильную центральную МЗ через этот скрипт. Сейчас центральная МЗ выставляется в трекире по двум осям, и если по одной из осей взгляд уже ушел из зоны действия, то по второй - присутствует. Например - поворот головы влево или вправо на угол больше 10 гр не убирает МЗ по вертикали. Также как и подъем-опускание взгляда не убирает центральную МЗ по горизонтали. Хочу попробовать, чтобы эта МЗ работала только в центральной части по логике "И". 1
72AG_Olega Опубликовано: 24 февраля 2020 Автор Опубликовано: 24 февраля 2020 31 минуту назад, Void сказал: автоматические смещение проверил - норм работают хочу допилить правильную центральную МЗ через этот скрипт. Сейчас центральная МЗ выставляется в трекире по двум осям, и если по одной из осей взгляд уже ушел из зоны действия, то по второй - присутствует. Например - поворот головы влево или вправо на угол больше 10 гр не убирает МЗ по вертикали. Также как и подъем-опускание взгляда не убирает центральную МЗ по горизонтали. Хочу попробовать, чтобы эта МЗ работала только в центральной части по логике "И". Не, там не так надо бы. Я уже думал над этим. Надо МЗ вообще везде убирать и в Трекире и в Опентрек и пилить её в самом Гловпай (там есть механизм) с учётом условий её применения по углу Yaw в узком переднем секторе. ЗЫ: с оверлеем всё получается, пока для прописных кнопок, но это уже большой плюс будет.
Void_VR Опубликовано: 24 февраля 2020 Опубликовано: 24 февраля 2020 на скорую руку только получиться триггер на +- 10гр по горизонту и +-2 гр по вертикали. Действие - множитель обеих осей на 0. Либо 1, если вне ЦМЗ. не очень выходит. Нужна функция плавного входа в ЦМЗ. Скачкообразно и есть ошибка сдвига центровки.
72AG_Olega Опубликовано: 24 февраля 2020 Автор Опубликовано: 24 февраля 2020 (изменено) Вопрос то серъёзный. На скорую руку не получится. Всё продумать надо...чтоб нормально получилось, особенно при входе/выходе из МЗ. 1 час назад, Void сказал: автоматические смещение проверил - норм работают Я старался. Думаю большего не надо. И автоматические опционально отключаются, если не нужны. Вот принципы настройки смещений: "Border - текущей границей смещения назовем границу, дальше которой пилот в кабине не сможет двигать головой в силу ограничения игры при текущем режиме движения самолёта. Есть три границы: 1. BorderMax - Фонарь открыт, самолёт находится на аэродроме, он не на разбеге при взлете или пробеге при посадке. 2. BorderMiddle - Фонарь открыт, скорость самолёта около сваливания или самолёт на разбеге или самолёт на планировании/пробеге 3. BorderMin - Фонарь закрыт. Ручные смещения не должны быть настроены больше, чем BorderMax, но могут быть настроены и на BorderMiddle значения по желанию пользователя. Автоматическое смещение по X и Y не должны быть настроено больше, чем возможное для BorderMin, это его оптимальное значение. Величины BorderMax и BorderMin могут быть разными для разных самолётов, особенно большие отличия будут в BorderMax между одномоторным и двухмоторным самолётами." Изменено 24 февраля 2020 пользователем 72AG_Olega
154_Viktor Опубликовано: 24 февраля 2020 Опубликовано: 24 февраля 2020 (изменено) Скрытый текст 38 40 публикаций Жалоба Опубликовано: В пятницу в 05:15 Немного модифицировал у себя скрипт AOM_10-1-Yaw_Trackir-Opentrack.PIE (изменения выделены жирным шрифтом) , чтобы при повороте назад голова автоматически смещалась вверх и в сторону взгляда. Мне понравилось. Кто хочет, может попробовать. if starting then PIE.FrameRate = 250 // частота выполнения скрипта (the frequency of script execution) //она должна быть равна или выше частоты камеры TrackIR5, то есть 120 Гц или выше //(it must be equal to or higher than the TrackIR 5 camera frequency, i.e. 120 Hz or higher) debug = '0:' + joystick0.Name + ', 1:' + joystick1.Name + ', 2:' + joystick2.Name + ', 3:' + joystick3.Name + ', 4:' + joystick4.Name + ', 5:' + joystick5.Name + ', 6:' + joystick6.Name //отображение номеров джойстиков, установленных на компьютере (displaying the numbers of joysticks installed on the computer) //номера джойстиков используются для обращения к ним в коде скрипта (joystick numbers are used to refer to them in the script code) var.DeltaYaw = 0 var.DeltaX = 0 var.DeltaY = 0 end if //---здесь может быть ваш код (your code may be here) var.DeltaYaw = (TrackIR1.RealYaw in degrees)/10 var.DeltaY = (var.DeltaYaw/2000)**2 var.DeltaX = (var.DeltaYaw/300)**3 //блок назначения осей (block assignment of the axes) FakeTrackir.yaw = (TrackIR1.RealYaw in degrees)/10 FakeTrackir.pitch = (TrackIR1.RealPitch in radians) FakeTrackir.roll = (TrackIR1.RealRoll in degrees) var.FakeTrackir.x = (TrackIR1.RealX in cm) + var.DeltaX var.FakeTrackir.y = (TrackIR1.RealY in cm) + var.DeltaY var.FakeTrackir.z = (TrackIR1.RealZ in cm) Где в этом коде можно отрегулировать чтобы сдвиг был только при крайнем положении головы? Сейчас у меня сдвиг начинается с 90 градусов . Изменено 24 февраля 2020 пользователем 154_Viktor
154_Viktor Опубликовано: 24 февраля 2020 Опубликовано: 24 февраля 2020 7 часов назад, 72AG_Olega сказал: Текущий код для автоматических и ручных смещений (под спойлером). Специально для oraclenok и других, кто разбирается Скрыть содержимое if starting then PIE.FrameRate = 250 ; частота выполнения скрипта, должна быть равна или выше частоты камеры TrackIR5 (т.е 120 Гц и выше) debug = '0:' + joystick0.Name + ', 1:' + joystick1.Name + ', 2:' + joystick2.Name + ', 3:' + joystick3.Name + ', 4:' + joystick4.Name //-----Текущие номера джойстиков (в случае переназначения их ID операционной системой, необходимо поменять номера джойстиков во всём коде) ;0: VKB-Sim Gunfighter Modern Combat Pro ;1: VKB-Sim Gunfighter Modern Combat Pro ;2: PPJoy Virtual Joystick 1 ;3: L3 ;4: Throttle - HOTAS Warthog //=======Пресет смещений и угла для вида на шесть: Истребители======= var.deltaX1 = 1050 // начальный делитель для автоматическое смещение по оси X var.deltaY1 = 3310 // начальный делитель для автоматическое смещение по оси Y var.deltaX2 = 6.7 cm // ручное смещение по оси X var.deltaY2 = 6.7 cm // ручное смещение по оси Y; смещение для вида на шесть var.deltaX3 = 6.7 cm // смещение по оси X для вида на шесть var.deltaY3 = 6.7 cm // смещение по оси Y для вида на шесть var.deltaZ3 = 5 cm // смещение по Z для вида на шесть var.cornerYawSix = 14.16 // угол по Yaw для фиксированного вида на шесть var.autoCorner = 18 // угол по Yaw начала срабатывания автоматических смещений по X и Y в задней полусфере. var.yUpVSyDown = 0.5 // //=======Конец пресета=================================== //---Установка начальных значений логических флагов смещений---------- var.flagDeltaX1 = false // флаг автоматического смещения X1 var.flagDeltaX2 = false // флаг ручного смещения X2 var.flagDeltaX3 = false // флаг смещения X3 для вида на шесть var.flagDeltaY1 = false // флаг автоматического смещения Y1 var.flagDeltaY2 = false // флаг ручного смещения Y2 var.flagDeltaY3 = false // флаг смещения Y3 для вида на шесть var.flagDeltaZ3 = false // флаг смещения Z3 для вида на шесть var.flagScrollLock = false // var.t1 = 200 // время работы таймера, задержка от многократного срабатывания клавиши ScrollLock var.timer1 = 0 Keyboard.RepeatFakeKeys = False end if //=============БЛОКИРОВКА ЦЕНТРОВКИ ВО ВРЕМЯ РАБОТЫ РУЧНЫХ СМЕЩЕНИЙ (Цетровку TrackIR и Opentrack нужно назначить на F7) if joystick0.Button13 = true and joystick4.Button3 = false and joystick0.Button20 = false and joystick0.Button19 = false then key.F7 = true end if if joystick0.Button13 = false then key.F7 = false end if //-------------------- Работа таймеров ---------------------------------------------------------- if var.timer1 < var.t1 then var.timer1 += 1 //работа таймера t1 - для кнопки ScrollLock end if //-------------------- Конец блока таймеров------------------------------------------------------ //==========Блок клавиш настройки смещений======================= //------Рокерный переключатель для ScrollLock--------- if (key.ScrollLock = true and var.timer1 = var.t1 and var.flagScrollLock = false) then var.flagScrollLock = true var.timer1 = 0 end if if (key.ScrollLock = true and var.timer1 = var.t1 and var.flagScrollLock = true) then var.flagScrollLock = false var.timer1 = 0 end if //-----------Назначения действий на клавиши---------- if var.flagScrollLock = true then if End and Shift=false and Alt=false then var.deltaX1 +=1 if Delete and Shift=false and Alt=false then var.deltaX1 -=1 if End +Shift and Alt=false then var.deltaX2 -=0.002 cm if Delete +Shift and Alt=false then var.deltaX2 +=0.002 cm if End +Alt and Shift=false then var.deltaX3 -=0.002 cm if Delete +Alt and Shift=false then var.deltaX3 +=0.002 cm if PageUp and Shift=false and Alt=false then var.deltaY1 -=1 if PageDown and Shift=false and Alt=false then var.deltaY1 +=1 if PageUp +Shift and Alt=false then var.deltaY2 -=0.002 cm if PageDown +Shift and Alt=false then var.deltaY2 +=0.002 cm if PageUp +Alt and Shift=false then var.deltaY3 -=0.002 cm if PageDown +Alt and Shift=false then var.deltaY3 +=0.002 cm if Insert and Shift=false and Alt=false then var.deltaZ3 -=0.1 cm if Home and Shift=false and Alt=false then var.deltaZ3 +=0.1 cm if End +Alt+Shift then var.cornerYawSix +=0.005 if Delete +Alt+Shift then var.cornerYawSix -=0.005 ; var.flagYaxis = false ; var.flagXaxis = false ; var.flagZaxis = false end if //--------Выкл/Вкл осей X, Y, Z, для режима настройки смещений if var.flagScrollLock = false then // ScrollLock не нажата, - оси X, Y, Z включены var.flagYaxis = true var.flagXaxis = true var.flagZaxis = true end if if var.flagScrollLock = true then // ScrollLock нажата, - оси X, Y, Z выключены var.flagYaxis = false var.flagXaxis = false var.flagZaxis = false end if //==========Конец блока клавиш настройки смещений======================= //------вкл/выкл автоматического смещения по Y и X if joystick4.Button18 = true then var.flagAutoX = true end if if joystick4.Button18 = false then var.flagAutoX = false end if if joystick4.Button19 = true then var.flagAutoY = true end if if joystick4.Button19 = false then var.flagAutoY = false end if //-----автоматическое смещение по X и Y при повороте по Yaw больше, чем var.autoCorner --- if (TrackIR1.RealYaw < -var.autoCorner) or (TrackIR1.RealYaw > var.autoCorner) then var.autoX = ((TrackIR1.RealYaw)/var.deltaX1)^5 end if if (TrackIR1.RealYaw < -var.autoCorner) or (TrackIR1.RealYaw > var.autoCorner) then var.autoY = ((TrackIR1.RealYaw)/var.deltaY1)^4 end if if -var.autoCorner < TrackIR1.RealYaw and TrackIR1.RealYaw < var.autoCorner then var.autoX = 0 var.autoY = 0 end if //==============виды на шесть-слева, на шесть справа============================= if joystick4.x = -1 then var.flagYaw = false // отключаем и обнуляем ось Yaw Трекир5 var.corner = -1 * var.cornerYawSix // устанавливаем фиксированный угол на "шесть" var.invert = -1 // инвертируем оси X и Z var.deltaX3 = -1 * |var.deltaX3| // присваиваем нужный знак смещению по X ; var.deltaY3 = |var.deltaY3| // присваиваем смещению по Y на шесть значение ручного смещения var.flagDeltaX3 = true // включаем смещение по X для вида на "шесть" var.flagDeltaY3 = true // включаем смещение по Y для вида на "шесть" var.flagDeltaZ3 = true // включаем максимальное удаление бронеспинки вида на "шесть" end if if joystick4.x = 1 then var.flagYaw = false // отключаем и обнуляем ось Yaw Трекир5 var.corner = 1 * var.cornerYawSix // устанавливаем фиксированный угол на "шесть" var.invert = -1 // инвертируем оси X и Z var.deltaX3 = |var.deltaX3| // присваиваем нужный знак смещению по X ; var.deltaY3 = |var.deltaY3| // присваиваем смещению по Y на шесть значение ручного смещения var.flagDeltaX3 = true // включаем смещение по X для вида на "шесть" var.flagDeltaY3 = true // включаем смещение по Y для вида на "шесть" var.flagDeltaZ3 = true // включаем максимальное удаление бронеспинки вида на "шесть" end if if -1 < joystick4.x < 1 then var.flagYaw = true // включаем ось Yaw Трекир5 var.corner = 0 * var.cornerYawSix// обнуляем фиксированный угол на "шесть" var.invert = 1 // отменяем инвертирование оси X и Z var.flagDeltaX3 = false // выключаем смещение по X для вида на "шесть" var.flagDeltaY3 = false // выключаем смещение по Y для вида на "шесть" var.flagDeltaZ3 = false // выключаем максимальное удаление бронеспинки вида на "шесть" end if //=============конец блока видов на "шесть"======================================= //-----------ручное смещение по X (deltaX)---------------------------------------- if joystick4.Button3 = true and TrackIR1.RealYaw < 0 then var.flagDeltaX2 = true var.deltaX2 = -1 * |var.deltaX2| end if if joystick4.Button3 = true and 0 < TrackIR1.RealYaw then var.flagDeltaX2 = true var.deltaX2 = 1 * |var.deltaX2| end if if joystick4.Button3 = false then var.flagDeltaX2 = false end if //-------------ручное смещение по Y (вверх и вниз)-------------------------------- if joystick0.Button20 = true then var.deltaY = |var.deltaY2| var.flagDeltaY2 = true end if if joystick0.Button19 = true then var.deltaY = -var.yUpVSyDown * |var.deltaY2| var.flagDeltaY2 = true end if if (joystick0.Button20 = false and joystick0.Button19 = false) then var.flagDeltaY2 = false end if //------------------------------------------------------ FakeTrackir.yaw = (TrackIR1.RealYaw in degrees)/10 * int(var.flagYaw)+ var.corner FakeTrackir.pitch = (TrackIR1.RealPitch in radians) FakeTrackir.roll = (TrackIR1.RealRoll in degrees) var.FakeTrackir.x = (TrackIR1.RealX in cm) * int(var.flagYaxis)* var.invert + var.autoX * int(var.flagAutoX)+ var.deltaX2 * int(var.flagDeltaX2) + var.deltaX3 * int(var.flagDeltaX3) var.FakeTrackir.y = (TrackIR1.RealY in cm) * int(var.flagYaxis) + var.autoY * int(var.flagAutoY)+ var.deltaY * int(var.flagDeltaY2) + var.deltaY3 * int(var.flagDeltaY3) var.FakeTrackir.z = (TrackIR1.RealZ in cm) * int(var.flagZaxis)* var.invert + var.deltaZ3 * int(var.flagDeltaZ3) //отправка данных в UDP сервер Python для их переcылки оттуда в Opentrack SendOsc('localhost', 6666, "/glovepie/pithon", FakeTrackir.yaw, FakeTrackir.pitch, FakeTrackir.roll, var.FakeTrackir.x, var.FakeTrackir.y, var.FakeTrackir.z) ;--знаки для копирования в код: | ^ Или в этом коде.
72AG_Olega Опубликовано: 24 февраля 2020 Автор Опубликовано: 24 февраля 2020 15 минут назад, 154_Viktor сказал: Или в этом коде. var.autoCorner = 18 // угол по Yaw начала срабатывания автоматических смещений по X и Y в задней полусфере. Забыл на клавиши настройку назначить, нужно вручную подбирать с шагом +0.5 где-то.
154_Viktor Опубликовано: 24 февраля 2020 Опубликовано: 24 февраля 2020 Просьба сделать кнопку как в старичке (смотреть через прицел) .
72AG_Olega Опубликовано: 24 февраля 2020 Автор Опубликовано: 24 февраля 2020 Только что, 154_Viktor сказал: Просьба сделать кнопку как в старичке (смотреть через прицел) . Будет. Когда передней полусферой займусь. По плану после видео про заднюю..(этот код)
72AG_Olega Опубликовано: 25 февраля 2020 Автор Опубликовано: 25 февраля 2020 2 часа назад, 154_Viktor сказал: Просьба сделать кнопку как в старичке (смотреть через прицел) . Попробуй на вкладке Опентрека Настройки\Горячие клавиши назначить кнопку на "Центр при удержании". Оно? 1
Void_VR Опубликовано: 25 февраля 2020 Опубликовано: 25 февраля 2020 7 часов назад, 154_Viktor сказал: Или в этом коде. кусок, отвечающий за автосмещение в задней полусфере: //=======Пресет смещений и угла для вида на шесть: Истребители======= var.deltaX1 = 1050 // начальный делитель для автоматическое смещение по оси X var.deltaY1 = 3310 // начальный делитель для автоматическое смещение по оси Y var.autoCorner = 18 // угол по Yaw начала срабатывания автоматических смещений по X и Y в задней полусфере. //=======Конец пресета=================================== //-----автоматическое смещение по X и Y при повороте по Yaw больше, чем var.autoCorner --- if (TrackIR1.RealYaw < -var.autoCorner) or (TrackIR1.RealYaw > var.autoCorner) then var.autoX = ((TrackIR1.RealYaw)/var.deltaX1)^5 end if if (TrackIR1.RealYaw < -var.autoCorner) or (TrackIR1.RealYaw > var.autoCorner) then var.autoY = ((TrackIR1.RealYaw)/var.deltaY1)^4 end if if -var.autoCorner < TrackIR1.RealYaw and TrackIR1.RealYaw < var.autoCorner then var.autoX = 0 var.autoY = 0 end if //------------------------------------------------------ var.FakeTrackir.x = (TrackIR1.RealX in cm) + var.autoX var.FakeTrackir.y = (TrackIR1.RealY in cm) + var.autoY 2
72AG_Olega Опубликовано: 8 марта 2020 Автор Опубликовано: 8 марта 2020 Работа над оптимизацией смещений идет. Уже в третий раз буду переписывать код, не сразу пришли простые решения в голову, к сожалению у меня это по жизни. Но теперь вроде окончательный вариант нарисовался. Параллельно узнаЮ новое для себя. Всем кто пользуется АОМ очень рекомендую пока изменить в скрипте следующую строчку: Стоит: FakeTrackir.yaw = (TrackIR1.RealYaw in degrees)/10 Изменить на: FakeTrackir.yaw = (TrackIR1.RealYaw in degrees) * 0.1 Операцию умножения компьютер делает намного быстрее, чем операцию деления! Это небольшая, но очень важная оптимизация, - плавность обзора должна еще немного улучшиться. Выход видео по смещениям запланировал на след выходные. После опубликования, вероятно, будет просьба =SF=Thresher заняться составлением мануала. 1
72AG_SerWolf Опубликовано: 8 марта 2020 Опубликовано: 8 марта 2020 Не перепутайте только точку с запятой 1
-DED-MAO Опубликовано: 8 марта 2020 Опубликовано: 8 марта 2020 3 часа назад, 72AG_Olega сказал: Стоит: FakeTrackir.yaw = (TrackIR1.RealYaw in degrees)/10 Изменить на: FakeTrackir.yaw = (TrackIR1.RealYaw in degrees) * 0.1 А где это всё искать? Поясни для чайников.. 1
Void_VR Опубликовано: 9 марта 2020 Опубликовано: 9 марта 2020 Кстати, а не проще в плане оптимизации кода использовать If-then-elseif-endif, а не набор нескольких if-then-endif? Я для двух вариантов значений вообще перед условием присваиваю одно значение, в условии проверяю, надо ли присвоить другое значение. Примерно так: var.autoX = 0 var.autoy = 0 var.autoZ = 0 if (|var.LR| > var.autoCorner) and var.FlagSix = 1 then var.autoX = (((|var.LR|-var.autoCorner)/var.deltaX)^5)*Sign(var.LR) var.autoY = (((|var.LR|-var.autoCorner)/var.deltaY)^4)*Sign(var.LR) var.autoZ = (var.FlagSix*((|var.LR|-var.autoCorner)/var.deltaZ^2)) end if ну и для проверки условия, где применимо, использую модуль значения переменной.
Ahtuba Опубликовано: 9 марта 2020 Опубликовано: 9 марта 2020 Это всего лишь "стиль письма", суть не меняется )) 16 минут назад, =989ShAP=Ahtuba сказал: Это всего лишь "стиль письма", суть не меняется )) Там в модуле операторов то пять с половинкой штук, для компилятора это ерунда ))
72AG_Olega Опубликовано: 10 марта 2020 Автор Опубликовано: 10 марта 2020 Мне с некоторых пор не нравятся конструкции условий с продожением else if... Там второе условие обязательно проверяется, и с ним бывают накладки. Можно чуть сэкономить, если это второе условие (которое обязательное) не упоминать вообще, оставив только первое. ☺️ 8 часов назад, Void сказал: Я для двух вариантов значений вообще перед условием присваиваю одно значение, в условии проверяю, надо ли присвоить другое значение. Стараюсь операции присваивания заменить на проверку логических флагов, она происходит раз в десять быстрее. Я уже напоролся с операциями присваивания на сглаживание Опентрека съедающее малые приращения.? ЗЫ: третий раз код с новыми идеями не зашел.(Тот, что выкладывал выше это был первый вариант) Откатился на второй вариант. На неделе буду облётывать...
Void_VR Опубликовано: 16 марта 2020 Опубликовано: 16 марта 2020 Олег, в англоязычной версии мануала ошибка: C:\Users\Olega\AppData\Local\Programs\Python\Python37>python -m pip install python-os отсутствует "С" в конце. Траблшутили сейчас с камрадом )
72AG_Olega Опубликовано: 16 марта 2020 Автор Опубликовано: 16 марта 2020 Блииин. Спасибо, что заметили. (хорошо, хоть в самом видео копирую из русской части, где нет ошибки) Обновлю мануал в архиве, заодно обновлю скрипт с формулой переделанной с деления на умножение. По смещениям в выходные сидел строчил мануал к видео, доделал оверлей в части визуализации нажимаемых клавиш и кнопок джойстика, + облётывал на берлоге. В принципе готов, чтобы записать видос, а то всё завтраки, да завтраки... (типа завтраками кормлю...). Сколько там всего заранее предусмотреть пришлось, и то есть чуйка в глубине души, что что-то забыл...?
Рекомендованные сообщения