#c #opengl #freeglut #opengl-compat
#c #opengl #freeglut #opengl-compat
Вопрос:
Я пытаюсь создать оружие-молот, которое может перемещаться вместе с осью X и вращаться вокруг оси Z. Прямо сейчас у меня проблема с молотком. Молоток может вращаться вокруг оси Z в фиксированной точке поворота, но когда я перемещаю молоток в новое положение, затем поворачиваю молоток, молоток все еще вращается вокруг старой точки поворота.
Я попытался добавить расстояние, которое я переместил до старой точки поворота, но это не работает. Как я мог решить эту проблему? Спасибо за любую помощь!
Вот мой код:
glPushMatrix();
//the rotation angle of Z-axis
glTranslatef(0.5f,1.0f,-1.0f); //Back to original point
glRotatef(zr, 0.0f, 0.0f, 1.0f); //Rotating
glTranslatef(-0.5f,-1.0f,1.0f); //The rotation piovt point
//build weapon base
//the moving distant on X-axis
glPushMatrix();
glColor3f(1, 0, 0);
glTranslatef(0.5f xr, 1.0f, -1.0f);
glRotatef(-90.0, 1.0, 0.0, 0.0);
quadratic = gluNewQuadric();
gluCylinder(quadratic, 0.2f, 0.2f, 2.0f, 50, 50);
glPopMatrix();
//build hammer
glPushMatrix();
glTranslatef(0.0 xr, 3.0f, -1.0f);
glRotatef(90.0, 0.0, 1.0, 0.0);
glColor3f(0, 1, 0);
quadratic = gluNewQuadric();
gluCylinder(quadratic, 0.2f, 0.2f, 1.0f, 50, 50);
glPopMatrix();
glPopMatrix();
Ответ №1:
Вы также должны переместить ось поворота:
float pivot_x = 0.5f xr;
glTranslatef(pivot_x, 1.0f, -1.0f); //Back to original point
glRotatef(zr, 0.0f, 0.0f, 1.0f); //Rotating
glTranslatef(-pivot_x, -1.0f, 1.0f); //The rotation piovt point
Комментарии:
1. Спасибо за ваш ответ, я забыл упомянуть, что под молотком есть база, я попытался добавить расстояние перемещения по оси x до точки поворота. Однако молоток перемещается быстрее, чем основание.
2. Я попробовал ваш метод, и он работает! У меня просто есть еще один вопрос. Прежде чем я использовал ваш метод, я пытался сделать то же самое, но разница в том, что я добавляю
xr
непосредственно в точку поворота, как этоglTranslatef(-0.5f xr,-1.0f,1.0f)
, я сначала не объявлял pivot_x . Однако это не работает, мой молоток движется быстрее, чем моя база, вы знаете почему?3. @AllenLi Базовая математика,
-0.5f xr
не равна-(0.5f xr)
4. Спасибо за помощь!