[1.7.10] Модель не переворачивается

Здравствуйте.
Нужно перевернуть модель вверх ногами. Делаю так:
Код:
GL11.glRotatef(180f, 0.0f, 0.5f, 0.0f);
Если два из трёх аргументов равны нулю, то ничего не меняется. Совсем ничего. Если делать так:
Код:
GL11.glRotatef(180f, 0.1f, 0.5f, 0.0f);
или так:
Код:
GL11.glRotatef(180f, 0.0f, 0.5f, 0.1f);
то модель переворачивается норм, но становится наклонена по x или z соответственно. А как повернуть ее только по одной оси?
 
timaxa007 написал(а):
"GL11.glRotatef(float angle, float x, float y, float z)"
[merge_posts_bbcode]Добавлено: 06.05.2015 14:50:27[/merge_posts_bbcode]

Если:
BlackCrafter написал(а):
Код:
GL11.glRotatef(180f, 0.0f, 0.5f, 0.1f);
То поворот по оси:
"x": Угол поворота 0,
"y": Угол поворота 90,
"z": Угол поворота 18.
 
Не понятно( Можно по-подробнее?
Какой аргумент за что отвечает?
 
--------------------------------------------
"glRotatef(angle, x, y, z)"

Угол поворота по оси "x" = (angle * x),
Угол поворота по оси "y" = (angle * y),
Угол поворота по оси "z" = (angle * z).
--------------------------------------------
Пример:
Код:
GL11.glRotatef(180.0F, 1.0F, 0.5F, 0.1F);

Угол поворота по оси "x" = (180.0F * 1.0F) = 180.0F,
Угол поворота по оси "y" = (180.0F * 0.5F) = 90.0F,
Угол поворота по оси "z" = (180.0F * 0.1F) = 18.0F.
--------------------------------------------
Более понятно и подробно не смогу.
 
Уу, ясно, спасибо))
 
Но она всё-равно не вертится по одной оси!
Например: GL11.glRotate(180f, 0.0f, 1.0f, 0.0f); - ему пофиг на это, ничего не меняется, хоть 0.5f хоть сколько.
А так GL11.glRotate(180f, 0.1f, 1.0f, 0.0f); или так GL11.glRotate(180f, 0.0f, 1.0f, 0.1f); или так GL11.glRotate(180f, 0.1f, 1.0f, 0.1f); вертится, но по всем осям.
 
Попытаюсь быть слепой вангой.
Попробуй эти три варианта:
GL11.glRotatef(180F, 1, 0, 0);
GL11.glRotatef(180F, 0, 1, 0);
GL11.glRotatef(180F, 0, 0, 1);
Я уверен, что хоть в одном из трех случаев модель повёрнется как надо. Иначе у тебя что-то с руками и придется показывать полный код рендера, а заодно скрин модели (вдруг она симметрична относительно осей, вокруг которых ты вращаешь).
 
Oldestkon написал(а):
Попытаюсь быть слепой вангой.
Почему слепой? Да, я тему озаглавил немного не так как должен был, но буквально разжевал суть проблемы в первом и седьмом постах. Как это сделать еще понятнее - я не знаю.
Сейчас метод glRotatef() ведет себя вообще не адекватно - не так, как когда я постил тему. Я запишу экран и видео выложу. По-другому словами не объяснить.
 
Код:
    @Override
    public void renderTileEntityAt(TileEntity tile, double x, double y, double z, float var8){
        // System.out.println("tile render")
        GL11.glPushMatrix();
        GL11.glTranslatef((float) x, (float) y + 1.5f, (float) z + 0.5f);

        GL11.glRotatef(180f, 0.0f, 0.0f, 0.5f);

        this.bindTexture(texture);
        modelBlock1.render(null, 0f, 0f, 0f, 0f, 0f, 0.0625f);
        GL11.glPopMatrix();
    }
http://www.youtube.com/watch?v=k11Ik9cUSJg
 
Ну и что тебе не нравится? Всё правильно. Разницы между тем, чтобы повернуть на 180 градусов вокруг вектора (0.0, 0.0, 0.1) и вокруг вектора (0.0, 0.0, 1.0) - никакой. Чего ты хочешь добиться-то? Перевернуть кверху ногами, но чтобы дуло смотрело в ту же сторону? Поворачивай вокруг оси Х.
 
Кажется, понял:
GL11.glRotatef(180F, 1.0f, 0.0f, 1.0f); - поворот на 180 градусов по x.
GL11.glRotatef(180F, 0.0f, 1.0f, 1.0f); - поворот на 180 градусов по y.
GL11.glRotatef(180F, 1.0f, 0.0f, 0.5f); - поворот на 90 градусов по x.
GL11.glRotatef(180F, 0.0f, 1.0f, 0.5f); - поворот на 90 градусов по y.
верно?
 
BlackCrafter написал(а):
Кажется, понял:е
GL11.glRotatef(180F, 1.0f, 0.0f, 1.0f); - поворот на 180 градусов по x.
GL11.glRotatef(180F, 0.0f, 1.0f, 1.0f); - поворот на 180 градусов по y.
GL11.glRotatef(180F, 1.0f, 0.0f, 0.5f); - поворот на 90 градусов по x.
GL11.glRotatef(180F, 0.0f, 1.0f, 0.5f); - поворот на 90 градусов по y.
верно?
Не совсем. По сути метод выглядит так GL11.glRotatef(градус, x, y, z); где градус - градус поворота, а x y z это множитель поворота на одноименной оси. Например GL11.glRotatef(180F, 1F, 0F, 0F); повернет модель на 180 градусов по оси x, так как 180 × 1.0 = 180
 
MrCreppo написал(а):
Например GL11.glRotatef(180F, 1F, 0F, 0F); повернет модель на 180 градусов по оси x, так как 180 × 1.0 = 180
Следуя этой логике, GL11.glRotatef(180F, 0.5F, 0F, 0F); повернет ее на 90 градусов по x? 180 x 0.5 = 90
Ведь так?
 
BlackCrafter написал(а):
Кажется, понял:
GL11.glRotatef(180F, 1.0f, 0.0f, 1.0f); - поворот на 180 градусов по x.
GL11.glRotatef(180F, 0.0f, 1.0f, 1.0f); - поворот на 180 градусов по y.
GL11.glRotatef(180F, 1.0f, 0.0f, 0.5f); - поворот на 90 градусов по x.
GL11.glRotatef(180F, 0.0f, 1.0f, 0.5f); - поворот на 90 градусов по y.
верно?
Нет. Абсолютно неверно.
1 строка повернет на 180 градусов по осям Х, Z.
2 строка повернет на 180 градусов по осям Y, Z.
3 строка повернет на 180 градусов по оси Х и на 90 по оси Z.
4 строка повернет на 180 градусов по оси Y и на 90 по оси Z.

Оси три! Не две, а три. И последний аргумент это не множитель, а ось Z. Каждый из аргументов, начиная со второго, есть множитель угла на этот аргумент для данной оси. Оси идут в порядке XYZ.
 
Oldestkon написал(а):
Нет. Абсолютно неверно.
Это я уже понял. Теперь поворачивается правильно. Я жду ответа на пост №15.
Но мне кажется, что у меня оси перепутываются местами. Посмотрите видео.
https://youtu.be/TCCnKEdqchY
Вчера (0,1,0) крутилось так, как сейчас (1,0,0). А (0,0,1) как сейчас (0,1,0). Хотя в коде я ничего не менял. Там и менять-то нечего.
Что происходит с осями?
 
BlackCrafter написал(а):
Я жду ответа на пост №15.
Ответ: да, так.
[merge_posts_bbcode]Добавлено: 08.05.2015 15:40:15[/merge_posts_bbcode]

BlackCrafter написал(а):
Вчера (0,1,0) крутилось так, как сейчас (1,0,0). А (0,0,1) как сейчас (0,1,0). Хотя в коде я ничего не менял. Там и менять-то нечего.
Что происходит с осями?
Ты случайно не написал два "glRotatef"? Если - да, то возможно из-за этого.
 
Oldestkon написал(а):
BlackCrafter написал(а):
Кажется, понял:
GL11.glRotatef(180F, 1.0f, 0.0f, 1.0f); - поворот на 180 градусов по x.
GL11.glRotatef(180F, 0.0f, 1.0f, 1.0f); - поворот на 180 градусов по y.
GL11.glRotatef(180F, 1.0f, 0.0f, 0.5f); - поворот на 90 градусов по x.
GL11.glRotatef(180F, 0.0f, 1.0f, 0.5f); - поворот на 90 градусов по y.
верно?
Нет. Абсолютно неверно.
1 строка повернет на 180 градусов по осям Х, Z.
2 строка повернет на 180 градусов по осям Y, Z.
3 строка повернет на 180 градусов по оси Х и на 90 по оси Z.
4 строка повернет на 180 градусов по оси Y и на 90 по оси Z.

Оси три! Не две, а три. И последний аргумент это не множитель, а ось Z. Каждый из аргументов, начиная со второго, есть множитель угла на этот аргумент для данной оси. Оси идут в порядке XYZ.
Ты тоже не вполне прав. Это не множитель угла для оси. Если первый аргумент - это угол, то следующие три задают ось вращения.

Если выполнить glRotatef(180.0F, 1.0F, 0.0F, 1.0F), то поворот будет не на 180 градусов вокруг оси Х, а потом на столько же вокруг оси Z, а на 180 градусов вокруг вектора (1, 0, 1). Это не идентично последовательному вызову сначала glRotatef(180.0F, 1.0F, 0.0F, 0.0F), а потом glRotatef(180.0F, 0.0F, 0.0F, 1.0F).

Аналогично вызовы glRotatef(180.0F, 0.0F, 1.0F, 0.0F) и glRotatef(180.0F, 0.0F, 0.1F, 0.0F) приведут к абсолютно идентичным результатам. По твоей же логике второй вызов функции сделает поворот на 18 градусов вместо 180.
[merge_posts_bbcode]Добавлено: 08.05.2015 17:06:23[/merge_posts_bbcode]

BlackCrafter написал(а):
MrCreppo написал(а):
Например GL11.glRotatef(180F, 1F, 0F, 0F); повернет модель на 180 градусов по оси x, так как 180 × 1.0 = 180
Следуя этой логике, GL11.glRotatef(180F, 0.5F, 0F, 0F); повернет ее на 90 градусов по x? 180 x 0.5 = 90
Ведь так?
Не слушай их. Это приведет к повороту на 180 градусов вокруг оси Х.
 
Ой, ой, блин. Как же я тупанул. 
Вот всю тему тут это утверждают, и честно, что-то заставило меня в это поверить.
Глуми прав, я дебил.

Как вариант, можно представить единичную сферу, последние три аргумента - составляющие вектора, который потом, наверное, нормализуется.
В итоге берется этот вектор и вокруг него поворачиваются все точки на заданный 
Вспоминается кватернион...

А меня плётками бейте.
Гифку даже нашёл (не, не про плётки):
Euler2.gif
 
Назад
Сверху