Вращение (перемещение) фиксированной «рукоятки кривошипа» в OpenGL - PullRequest
0 голосов
/ 24 октября 2011

Хорошо, у меня есть шестеренка (зубчатая передача), которую я нарисовал в opengl. У меня есть цилиндр, прикрепленный к одной из его сторон, который должен моделировать рукоятку (в основном, я делаю имитацию ручного сверла). Теперь, когда я вращаю шестерню (работает), я хочу, чтобы цилиндр двигался так, как будто он прикреплен к нему. Между прочим, центральное отверстие винтика находится в начале координат.

Т.е. я хочу, чтобы это работало так, как на этом рисунке:

http://www.uktoolcentre.co.uk/ProductImages/25133/BIG/BIG/25133.jpg

за исключением того, что часть ручки будет торчать прямо из красного бита вместо расширения.

Я просто не могу обойти математику, чтобы при вращении шестерни цилиндр двигался так, как если бы он был прикреплен к нему.

Любая помощь?

1 Ответ

1 голос
/ 24 октября 2011

Вам просто нужно убедиться, что перевод в точку около внешнего круга "красного бита" выполняется после применения вращения.

В "классическом" непосредственном 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).

...