Форум программистов, компьютерный форум, киберфорум
OpenGL
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/75: Рейтинг темы: голосов - 75, средняя оценка - 4.80
0 / 0 / 0
Регистрация: 25.11.2015
Сообщений: 7
1

Вращение объекта вокруг своей оси

25.11.2015, 02:53. Показов 13454. Ответов 15
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Задаю вопрос впервые, так что попрошу не придираться к возможным ошибкам/недостатку инфы.

Начал учить opengl ~ неделю назад.

Пишу первую игру на opengl, реализовал перемещение одного из обьектов (в дальнейшем это будет стрела) по формуле, которая каждый раз высчитывает в функции таймера координаты нашего обьекта. Зависят координаты от силы выстрела и угла под которым производится выстрел.

По идее стрела эта, в полете должна поворачиваться в зависимости от того взлетает она вверх или уже падает.
пытался реализовать через glrotatef(...);
Кое-как получилось перевернуть, НО, поворачивает оно стрелу вокруг точки 0,0, а не вокруг оси самой стрелы. При этом все что высчитывал по формуле сбивается.
(Слава Богу уже хоть не всю сцену поварачивает...)

Если что либо описал криво, либо плохо задал вопрос - говорите, переспрашивайте, исправлюсь ^^
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.11.2015, 02:53
Ответы с готовыми решениями:

Вращение планеты вокруг солнца, и вокруг своей оси
У меня есть Солнце, которое находиться в координатах(0.0.0), и нужно вращать планеты, как по...

C# OpenTK Вращение камеры вокруг своей оси
Итак, я начал разбираться в OpenGL, выбрал язык C# и библиотеку OpenTk. Привожу код моего творения:...

Вращение фигуры вокруг своей оси за курсором мыши
Всем доброго времени суток. Уже несколько недель бьюсь над данной задачей: как реализовать...

Вращение примитива вокруг оси z
Здравствуйте! Необходимо повернуть квадрат вокруг оси z на заданный угол, по нажатию кнопки. (язык...

15
65 / 53 / 4
Регистрация: 06.09.2010
Сообщений: 254
25.11.2015, 11:34 2
Никакого glRotatef "не существует". Мне кажется, вы изучаете какой-то старый OpenGL, версии 1 или 2.

В 2015 году вы должны использовать OpenGL версии 3.3 или старше, с VAO, VBO, матрицами Model, View, Projection и шейдерами. Вот начало серии туториалов, что помогут вам быстро разобраться в этом вопросе.

Также на мой взгляд не следует начинать изучение OpenGL с написания игры, даже простой. Я бы советовал сначала изучить основы, путем написания небольших демок. Потом какие-то простенькие игры вроде змейки или тетриса. И потом, если получилось, уже что-то более сложное, например, со стрелами.
0
0 / 0 / 0
Регистрация: 25.11.2015
Сообщений: 7
25.11.2015, 14:05  [ТС] 3
Использую freeglut 2.0
Вы советуете бросить то, что уже начал делать и начать все заново?
0
Модератор
3401 / 2172 / 353
Регистрация: 13.01.2012
Сообщений: 8,413
25.11.2015, 16:00 4
Цитата Сообщение от Anarez Посмотреть сообщение
поворачивает оно стрелу вокруг точки 0,0, а не вокруг оси самой стрелы
вам нужно сделать translate "центра" стрелы в начало координат и только потом rotate

Добавлено через 9 минут
Цитата Сообщение от afiskon Посмотреть сообщение
Никакого glRotatef "не существует"
никогда не понимал этого маниакального стремления по отпиливанию рук и замены их на нечто более производительное... что мешало им оставить все что было после прихода этих самых конвейеров? религия?
0
3455 / 1643 / 236
Регистрация: 26.02.2009
Сообщений: 8,034
Записей в блоге: 5
25.11.2015, 16:22 5
Цитата Сообщение от vxg Посмотреть сообщение
вам нужно сделать translate "центра" стрелы в начало координат и только потом rotate
Лучше изначально "стрелу хранить возле центра координат". Точнее центр вращения стрелы должен совпадать с центром координат, то есть (0,0)
0
0 / 0 / 0
Регистрация: 25.11.2015
Сообщений: 7
25.11.2015, 16:49  [ТС] 6
Цитата Сообщение от vxg Посмотреть сообщение
вам нужно сделать translate "центра" стрелы в начало координат и только потом rotate
т.е.
pushmatrix();
translate ();
rotate()
translate();
popmutrix();
Так?
Цитата Сообщение от snake32 Посмотреть сообщение
Лучше изначально "стрелу хранить возле центра координат". Точнее центр вращения стрелы должен совпадать с центром координат, то есть (0,0)
Это не возмонжо, ибо она постоянно перемещается и в зависимости от перемещения она должна вращаться.
если нужно - могу показать код.
0
Модератор
3401 / 2172 / 353
Регистрация: 13.01.2012
Сообщений: 8,413
25.11.2015, 22:25 7
Цитата Сообщение от Anarez Посмотреть сообщение
Так?
да. главное определитесь чего translate) в том смысле - плюс или минус)
Цитата Сообщение от Anarez Посмотреть сообщение
Это не возмонжо
это не просто возможно это должно быть и я немного удивлен что это не так. есть модель стрелы. я бы ее создал в начале координат так как это удобно. а когда нужно что бы эта стрела летела просто перед ее отрисовкой делаем translate. а если нужно что бы вращалась то делаем rotate и translate. а вот если у нее "летят" координаты модели тогда либо их по-честному вращайте либо через правое плечо translate rotate translate
0
0 / 0 / 0
Регистрация: 25.11.2015
Сообщений: 7
25.11.2015, 22:52  [ТС] 8
Цитата Сообщение от vxg Посмотреть сообщение
через правое плечо translate rotate translate
Ну вот... я запутался...
можно как либо с вами связаться что бы вы мне подробнее обьяснили про "правое плечо"?)
0
65 / 53 / 4
Регистрация: 06.09.2010
Сообщений: 254
25.11.2015, 23:10 9
Anarez,

Вы советуете бросить то, что уже начал делать и начать все заново?
Знаете, я в школе 8 лет учил немецкий. Но так получилось, что в программировании английский намного нужнее, а немецкий практически не нужен. Так что да, я забросил немецкий и занялся английским.

Можно в 2015 году и MS DOS конечно изучать. Но я лично ценю свое время, все-таки это ресурс не восполняемый и ОЧЕНЬ ограниченный. Так какой смысл тратить его на изучение давно устаревшей и нигде не используемой технологии?
0
0 / 0 / 0
Регистрация: 25.11.2015
Сообщений: 7
25.11.2015, 23:51  [ТС] 10
Цитата Сообщение от afiskon Посмотреть сообщение
Так какой смысл тратить его на изучение давно устаревшей и нигде не используемой технологии?
Разобраться как она работает, что бы потом не было вопросов по новым технологиям. Ведь новые всегда строятся на старом.
0
Модератор
3401 / 2172 / 353
Регистрация: 13.01.2012
Сообщений: 8,413
26.11.2015, 14:45 11
Цитата Сообщение от Anarez Посмотреть сообщение
Разобраться как она работает, что бы потом не было вопросов по новым технологиям. Ведь новые всегда строятся на старом.
тут не совсем так. эти уроды новаторы сделали так что новые версии GL все переиначивают на свой лад, а все что было хоронят - комплекс у них такой.
0
3455 / 1643 / 236
Регистрация: 26.02.2009
Сообщений: 8,034
Записей в блоге: 5
26.11.2015, 15:10 12
Цитата Сообщение от vxg Посмотреть сообщение
так что новые версии GL все переиначивают на свой лад
Дык, потому что они более производительные... сами же об этом выше написали.
DX, кстати, тоже так делает. Код написанный под DX9 не подойдёт для DX10, 11, 12.
В графике важна производительность и отказываться от неё в угоду совместимости с древними ф-иями никто не будет.
0
0 / 0 / 0
Регистрация: 25.11.2015
Сообщений: 7
26.11.2015, 16:58  [ТС] 13
vxg, А что по поводу что бы уделить мне минут 10 Вашего времени и попробовать обьяснить, что такое:
Цитата Сообщение от vxg Посмотреть сообщение
правое плечо translate rotate
0
Модератор
3401 / 2172 / 353
Регистрация: 13.01.2012
Сообщений: 8,413
26.11.2015, 23:36 14
Цитата Сообщение от snake32 Посмотреть сообщение
В графике важна производительность и отказываться от неё в угоду совместимости с древними ф-иями никто не будет.
я бы понял если бы т.н. статический конвейер был бы не камильфо среди богемы и лица использующие его подвергались публичному осуждению, НО при этом статический конвейер БЫЛ бы в GL. но когда у человека навсегда забирают велосипед что бы он случайно не научился крутить педали (ведь это неэффективно) и дают истребитель напичканный электроникой по самые помидоры (ведь это так эффективно, пусть сразу учится на пилота) - это жесть...
Цитата Сообщение от Anarez Посмотреть сообщение
А что по поводу что бы уделить мне минут 10 Вашего времени и попробовать обьяснить, что такое
а вы спрашивайте я отвечу) в данном конкретном случае я имел ввиду следующее:
1) можно иметь координаты элементов стрелы такими что центр стрелы получается в центре координат. тогда для того что бы она полетела нужно перед ее рисованием сделать translate. а что бы чуть чуть повернулась и полетела сделать rotate и translate
2) можно иметь координаты элементов стрелы такими что она уже будет висеть в нужной точке траектории. в этом случае ее достаточно просто нарисовать. однако, если мы хотим ее еще и повернуть придется либо пересчитывать координаты элементов что бы они уже оказались повернутыми либо заниматься жуткой фигней - при рисовании таскать стрелу в начало координат, поворачивать и возвращать обратно, т.е. translate / rotate / translate
0
64 / 17 / 3
Регистрация: 09.11.2013
Сообщений: 120
27.11.2015, 22:09 15
C++
1
2
3
4
5
pushmatrix();
translate ();
rotate()
translate();
popmutrix();
это правильный ответ насчет вращения стрелы.Надо оборвать старую матрицу вращения и назначить новую

Чтобы стрела двигалась от силы выстрела надо поставить изменяющуюся переменную:

C++
1
2
3
4
5
6
7
GLfloat F=1;
F=F+сила выстрела;
pushmatrix();
translate (0.0f,0,0f,F); перемещение по оси Z
rotate()
translate();
popmutrix();
и еще надо прописать,если стрела "долетела" до обьекта if(цель==1) { F=1; стрелу на место }
0
0 / 0 / 0
Регистрация: 25.11.2015
Сообщений: 7
27.11.2015, 22:33  [ТС] 16
Цитата Сообщение от Intronessia Посмотреть сообщение
и еще надо прописать,если стрела "долетела" до обьекта if(цель==1) { F=1; стрелу на место }
Либо мне показалось, либо Вы описали перемещение стрелы в трёхмерном пространстве. Мой первый проект - 2D, z у меня не меняется. Используется лишь как вектор для поворота
0
27.11.2015, 22:33
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.11.2015, 22:33
Помогаю со студенческими работами здесь

Вращать сферу вокруг центра координат, и одновременно вращать ее вокруг своей оси
Всем привет! Долблюсь о стену второй день ( Суть в том, что мне необходимо вращать сферу вокруг...

Поворот вокруг своей оси (blender)
Глупый вопрос, но всёравно задаю его. Как повернуть объект вокруг своей оси? (либо я чтото не...

Не удается реализовать поворот елки вокруг своей оси по x и по у
У меня такая проблема, в OpenGL я почти ничего не понимаю, но ёлку реализовать получилось(не с...

Поворот объекта вокруг оси
Здравствуйте. Знаю что подобная тема уже поднималась на форуме, но интересующий меня ответ я не...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru