Вращение текстуры

Версия Minecraft
1.7.10
1,976
68
220
Доброго времени суток всем о/

Вопрос до ужаса банален: как вращать текстуру на рисуемом объекте?
Заранее спасибо :3
 
Решение
Способ для ленивых:
Java:
GL11.glMatrixMode(GL11.GL_TEXTURE);
GL11.glPushMatrix();
GL11.glRotatef(...);
// .. render
GL11.glPopMatrix();
GL11.glMatrixMode(GL11.GL_MODELVIEW);
P.S. Способ быстрый, но он не очень 'красивый', обычно такое делать не рекомендуют, хотя майн и по-ужаснее вещи делает :d
P.P.S. Код на работоспособность не проверял, обязательно отпишись :V

mod

156
2
12
наверно как и двигать, а это можно увидит на зачаровании и при спавне визера
 
1,990
18
105
Способ для ленивых:
Java:
GL11.glMatrixMode(GL11.GL_TEXTURE);
GL11.glPushMatrix();
GL11.glRotatef(...);
// .. render
GL11.glPopMatrix();
GL11.glMatrixMode(GL11.GL_MODELVIEW);
P.S. Способ быстрый, но он не очень 'красивый', обычно такое делать не рекомендуют, хотя майн и по-ужаснее вещи делает :d
P.P.S. Код на работоспособность не проверял, обязательно отпишись :V
 
Последнее редактирование:

CumingSoon

Местный стендапер
1,634
12
269
Если текстура это U и V то тебе всего то надо вращать эти координаты относительно оси Z. Я бы посоветовал делать это через умножение на матрицу. Я обычно использую ejml (Efficent java matrix library от Google).
Так если ось фиксированная, то там куча вычислений у матрицы убирается. Дело доходит до того, что можно повернуть синусом и косинусом, что займёт 4 умножения и 2 сложения
 
1,976
68
220
@CoomingSoon, я, возможно, что-то не так делаю, но как применить эту формулу к .addVertexWithUV?
@Oldestkon, не вышло:
HbDquSujovc.jpg
 
2,505
81
397
Ну у тебя есть вершины (ювешки). Возьми матрицу Matrix4f, поверни ее, а затем трансформируй ювешки. Все нужные методы там есть. Способ такой себе, но сначала лучше сделать хоть как-нибудь, чтобы работало, а затем уже думать об оптимизации.
 
1,976
68
220
А, всё, сделал.
@Oldestkon, твой метод не подходит для анимированных текстур (через .mcmeta) [может и есть решение для них, но пока оно не нужно], но для статичных нормально.
Однако есть две проблемы:
  • оно вращается вокруг координаты (0; 0), а нужно вокруг центра
  • пиксели переносятся и как бы дублируются, а мне это не нужно

P.S. нет, для первого случая ни glTranslated, ни изменение координат в addVertexWithUV не выход, ибо тогда оно сдвигает текстуру и получается фигня
HG2YyglCm0o.jpg
 
Последнее редактирование:
1,990
18
105
P.S. нет, для первого случая ни glTranslated, ни изменение координат в addVertexWithUV не выход, ибо тогда оно сдвигает текстуру и получается фигня
Вообще-то тренслейт - выход. Просто надо потом обратно сместить 1514138568985.png

Насчёт дублирования пикселей не очень понятно, а что делать если текстурные координаты выходят за рамки [0, 0] - [1, 1]? Обычно либо дублируют, либо клемпят, и это настраивается параметром текстуры при загрузке, в том числе через .mcmeta.
Иначе я не очень понимаю, что ты пытаешься сделать.
 
1,976
68
220
Иначе я не очень понимаю, что ты пытаешься сделать.
Грубо говоря смотри:
Есть у меня квадратик. Я хочу на нём рендерить текстуру, которая будет вращаться, при этом квадратик должен быть статичен. Если UV вылазит за квадратик - она обрезается самими границами полигона. Но если не доходит - текстура копируется с другой стороны. Вот мне и надо её "обрезать" - чтобы там ничего не было.

1. Есть текстура в фотошопе
2. Я её поворачиваю, чем часть пикселей обрезается, а часть остаётся пустой (прозрачные)
3. Но в майне, вместо того чтобы исчезнуть, они дублируются с противоположной стороны текстуры (синяя заливка областей, которые дублируют пиксели)
Pvtp2_GCBH4.jpg

Вот и вопрос: как от этого избавиться (чтобы там ничего не было)?
 
2,505
81
397
Если не ошибаюсь, при загрузке текстуры нужно указать:
Код:
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
Или заменить GL_CLAMP_TO_EDGE на GL_CLAMP_TO_BORDER и указать цвет также через glTexParameteri.

Правда я не знаю, можно ли такое провернуть через ванильный mcmeta файл.
 
Сверху