#opengl #graphics #3d #glut #glu
#opengl #графика #3D #перенасыщение #glu
Вопрос:
Хорошо, у меня есть шестеренка (зубчатая передача), которую я нарисовал в opengl. У меня есть цилиндр, прикрепленный к одной его стороне, который должен моделировать рукоятку (по сути, я делаю симуляцию ручного сверла). Теперь, когда я поворачиваю шестеренку (рабочую), я хочу, чтобы цилиндр двигался так, как будто он прикреплен к нему. Кстати, центральное отверстие шестеренки находится в начале координат.
Т.е. я хочу, чтобы это работало, как на этом рисунке:
http://www.uktoolcentre.co.uk/ProductImages/25133/BIG/BIG/25133.jpg
за исключением того, что часть дескриптора будет торчать прямо из красного бита, а не на расширении.
Я просто не могу разобраться в математике, чтобы сделать так, чтобы при вращении шестеренки цилиндр двигался так, как будто он прикреплен к нему.
Любая помощь?
Ответ №1:
Вам просто нужно убедиться, что перевод в точку, расположенную рядом с внешним кругом «красного бита», выполняется после применения поворота.
В «классическом» немедленном OpenGL (который, я не уверен, применим к вашему коду) это было бы что-то вроде:
const float main_cog_radius = 1.f;
const float crank_radius = 0.08f;
glPushMatrix();
glRotatef(main_cog_angle, 0.f, 0.f, 1.f);
draw_main_cog(main_cog_radius);
glTranslatef(main_cog_radius - crank_radius, 0.f, 0.f);
draw_crank(crank_radius);
glPopMatrix();
Предполагается, что ось, проходящая через центр главного шестеренки, равна (0,0,1).
Комментарии:
1. Спасибо за быстрый ответ, я попробую сейчас! — И да, я думаю, я использую немедленный режим (поскольку я делаю вещи «старым» способом, т.Е. Конечный автомат, а не конвейер)