-
Убираем нелинейность без переделки
Данный пост не претендует на истину, всё описанное очень субъективно.
Купив в своё время х52 начал читать форумы и узнал о "зловещей" нелинейности двух главных цифровых осей. Конечно-же я тоже переделал свой х52. Но результатом я лично остался недоволен, почему? Убрав нелинейность, я получил относительно неточный джой в центре, мне даже пришлось выставлять мёртвые зоны, чего раньше я не делал. Более того, мне пришлось накручивать кривые отклика в настройках управления (я играю в ДКС Мире, как и что в других вообще без понятия). Иными словами я, убрав аппаратную нелинейность, потом добавил её программно, тогда я себе и задал вопрос – а зачем я это всё делал? Ну да ладно сделал и ладно.
Затем, общаясь на форуме, зашёл у меня спор с другим обладателем х52 по поводу всё той же нелинейности. Говорю ему, если у тебя новый джой на гарантии, то необязательно его разбирать, можно просто выкрутить кривую отклика в обратную сторону и получишь прямой отклик на РУСе. На что он со мной не согласился, мол, так а квадрат в джой-тестере как рисовался, так и рисуется. Ну, в общем, у меня и у него не было желания доказывать свою правоту, каждый остался при своём.
Меня эта тема не интересовала, меня интересовала тема дрожания нецифровых осей и я её успешно решил. http://www.sukhoi.ru/forum/showthrea...31#post2012131
А потом в один день мне в голову пришла мысль, а что если с помощью этого-же метода убрать нелинейность? Суть метода в принципе практически ничем не отличается от настройки кривой отклика в самой игре, НО теперь можно будет рисовать заветные круги в джой-тестере. И если человек не хочет разбирать свой джой, или он по своим «религиозным» убеждения уверен, что самое главное это круги в джойтестере, то этот метод для него.
В общем ближе к делу. Ссылки на программы и методы их установки я давал в своём посте про дрожание осей.
А здесь я опишу скрипт, который убирает нелинейность.
//**********************
var.x = joystick1.x //читаем в переменную х состояние оси х
var.y = joystick1.y //читаем в переменную y состояние оси y
//**********************
if var.x<0 then
var.x1 = |var.x|
var.x1 = sqrt(var.x1)
var.x1 *=-1
ppjoy.Analog0 = Smooth(var.x1,10,0.0001)
else
var.x1 = sqrt(var.x)
ppjoy.Analog0 = Smooth(var.x1,10,0.0001)
end if
//**********************
if var.y<0 then
var.y1 = |var.y|
var.y1 = sqrt(var.y1)
var.y1 *=-1
ppjoy.Analog1 = Smooth(var.y1,10,0.0001)
else
var.y1 = sqrt(var.y)
ppjoy.Analog1 = Smooth(var.y1,10,0.0001)
end if
//**********************
Дам некоторый комментарий. Первая нелинейная ф-ция которая мне вспомнилась это квадрат числа, но поскольку значения оси принимают значения от -1 до 1 она сама собой отпала. Следующей была куб. Чтобы из нелинейной ф-ции х в кубе получить линейную мне надо был корень в степени 3, но у меня почему-то не получилось заставить работать ф-цию x в степени y, поэтому я махнул рукой и взял обыкновенный квадратный корень, вот тут и возникла проблема с чётностью, поэтому я проверяю состояние оси и если она меньше 0 то я беру корень из модуля оси а уже затем умножаю его на -1.
Ну и легенькое сглаживание при записи значения в ось виртуального джоя, но это совсем уже индивидуально, многие этого не любят категорически, можно убрать при желании.
В результате получил такой результат:
До
После
Надеюсь кому-то пригодиться!
-
Re: Убираем нелинейность без переделки
Добавлю ещё пару строк. Поскольку в первой редакции скрипта я использовал ф-цию квадратного корня, то скрипт имел характер константы.
Сегодня переделал. Как я уже упоминал ф-ция power(x,y) у меня почему-то не работает, поэтому я немного схитрил и пошёл другим путём.
Вместо var.x1 = sqrt(var.x1), я использовал var.x1 = exp(0.58*ln(var.x1)).
Тоест x в степени y я записал как exp(y*ln(x)). в данном случае 0,58 это 1/7, тоесть я беру корень в степени 1/7, квадратный както великоват оказался.
Меняя это значение вы можете менять кривую отклика осей.
Результат:
Вложение 170657
-
Re: Убираем нелинейность без переделки
очень красиво, а теперь для чайников, если не сложно, что куда нужно вствить? ))))
PPJoy можно ли заменить на VJoy?
-
Re: Убираем нелинейность без переделки
Да ничего никуда вставлять не надо, когда я искал способ, мне попадался VJoy и, если я не ошибаюсь, он тоже вполне подходит, но я не пробовал, у вас есть прекрасная возможность это сделать. Если у вас уже стоит VJoy, то вам необходимо только скачать GlovePIE(даже устанавливать не надо) и запустить скрипт. Единственно что в скрипте вместо оси ppjoy.AnalogХ прийдётся писать имя виртуального джоя, вероятней всего VJoy.AnalogХ.
-
Re: Убираем нелинейность без переделки
вот спасибо, вечером попробую,
уж очень не хочется курочить новый джойстик
-
Re: Убираем нелинейность без переделки
Дак в том вся прелесть этого способа, что разбирать джой не надо, плюс кривизну нелинейности можно выкрутить хоть в обратную сторону.
-
Зашедший
Re: Убираем нелинейность без переделки
Другая сторона медали физической переделки джоя, например х52про, это то что убирается люфтящая шестеренчатая передача. В итоге только лучше становится.
По кондору http://www.sukhoi.ru/forum/showthrea...t=40261&page=2
-
Re: Убираем нелинейность без переделки
Оно то возможно и так, но лично у меня центр стал очень не точным.
Ваши права
- Вы не можете создавать новые темы
- Вы не можете отвечать в темах
- Вы не можете прикреплять вложения
- Вы не можете редактировать свои сообщения
-
Правила форума