glTranslate

Версия Minecraft
1.7.10
API
Forge
Подскажите пожалуйста,как правильно оформить транслейт чтоб он выезжал с какого-либо угла(плавно).
 
Последнее редактирование:
343
14
113
Требуется использовать функции интерполяции.
Minecraft также вводит такое понятие как partialTicks, значение, которое плавно меняется в пределах 0..1 (часто передаются в функции рендера самим Майном).Таким образом, получив какой-то подобный параметр, сложив его с дискретно изменяющейся величиной типа того же ticksExisted для сущностей, можно преобразовать эту сумму в некоторые значения, которые уже можно передать в соответствующие методы glTranslate и glRotate.
Также можно, в теории, ссылаться на показания системных часов или пытаться подстраиваться под кадровую частоту.
 
343
14
113
Показанный фрагмент не содержит никакой анимации в целом, поэтому здесь нет никаких опорных точек, между которыми можно осуществить плавный переход.
В качестве примера могу предложить получить количество тиков существования клиентского игрока (mc.ThePlayer), сложить значение с partialTicks, подать это всё на вход гармонической функции типа синуса, и передать результат вычисления функции в качестве некоторых параметров для методов glScaled или glTranslated.
Это даст некоторую степень понимая касаемо того, как должен строится подобный процесс.
В перспективе можно будет использовать негармоническую функцию, что-то вроде функции насыщения, чтобы анимация не зацикливалась, зависит от конкретных задач.
Следует ли то, что я описал выше, декомпозировать на отдельные методы, сказать невозможно. Вопрос архитектуры ПО, лучше руководствоваться принципом уместности.
 
1,371
112
241
Посмотреть вложение 16280Как мне тут можно использовать интерполяцию ,чтоб задать плавность?В каком методе или ещё чём-то
Не всё, о чём тебе говорят, есть в отдельном методе. Зачастую этот метод надо самому создать.
В твоём случае нужен не отдельный метод, а алгоритм.
Ошибки в коде со скрина (ради бога, прекрати кидать скриншоты и вставляй код в соответствующий блок):
1) null оставлять нежелательно, в особенности если далее нет проверки на этот самый null.
2) try catch конструкция не нуждается в представлении и пояснении. Она тут неуместна.
3) Использование AT, чтобы достать ненужную (в данном конкретном случае) переменную.
4) Как уже было сказано до этого, Timer тут вообще не должен использоваться.
5) В glTranstlatef не передаётся никакая переменная, способная изменяться. Исключительно числа-константы.
6) Аннотация @Nullable на minecraft не нужна, т.к. он никогда не будет null.

Теперь о том, как создать эту самую онемацею. @Deco20-19 говорит профессиональным языком что и куда, потому ты не понимаешь как сделать анимацию. Проще говоря, он хочет предложить что-то вроде такого алгоритма (возможно у него в голове он выглядит несколько иначе, однако мне кажется, что именно такое решение наиболее простое):
1) Необходима переменная, способная изменяться во времени;
2) В зависимости от значения этой переменной, применяем glTranslatef (как - твоя забота, можешь и умножать на эту переменную, и складывать, и делить - полёт фантазии);
3) Если переменная выше значения n - glTranslatef применяется с переменной, которая была до этого самого n.
4) Как только закончили рендер, переменную необходимо обнулить.
 
Сверху