使用OpenGL如何实现物体绕体外任意轴旋转?
我用glRotatef(m_fAngleX,1.0f,0.0f,0.0f);然后让m_fAngleX循环加10,可以让立方体绕中心轴旋转;如果我想让立方体绕体外的任意轴旋...
我用glRotatef(m_fAngleX,1.0f,0.0f,0.0f);然后让m_fAngleX循环加10,可以让立方体绕中心轴旋转;如果我想让立方体绕体外的任意轴旋转,我该怎么办呢?
展开
推荐于2018-04-23
展开全部
可以这样
假设你要绕轴AB旋转
1、计算把轴AB一个点平衡原点(假如我这里是B点移动到原点)所需移动量为向量xyz,把立方体也移动向量xyz
2、把立方休按A点位置旋转(因为B点已经在原点了),即把A点坐标填入glRotate后面三个参数就是
3、把物体移动回向量xyz即可
假设你要绕轴AB旋转
1、计算把轴AB一个点平衡原点(假如我这里是B点移动到原点)所需移动量为向量xyz,把立方体也移动向量xyz
2、把立方休按A点位置旋转(因为B点已经在原点了),即把A点坐标填入glRotate后面三个参数就是
3、把物体移动回向量xyz即可
展开全部
glQuaternion m_qHeading; //四元数
float m_HeadingDegrees; //转动角度
Vector3 eye, center; //摄像机参数
Vector3 m_Position; //轴位置
Matrix matrix; //矩阵
m_qHeading.CreateFromAxisAngle(0.0f, 1.0f, 0.0f, m_HeadingDegrees); //将转动角变成四元数
m_qHeading.CreateMatrix(matrix); //将四元数矩阵化
eye *= Matrix;
center *= Matrix;
gluLookAt(eye.x + m_Position.x,eye.y + m_Position.y,eye.z + m_Position.z, center.x + m_Position.x,center.y + m_Position.y,center.z + m_Position.z,0,1,0);
其中四元数可以直接百度“glQuaternion" 可以找到矩阵化的算法,向量和矩阵相乘你也可以找到一些资料的。
float m_HeadingDegrees; //转动角度
Vector3 eye, center; //摄像机参数
Vector3 m_Position; //轴位置
Matrix matrix; //矩阵
m_qHeading.CreateFromAxisAngle(0.0f, 1.0f, 0.0f, m_HeadingDegrees); //将转动角变成四元数
m_qHeading.CreateMatrix(matrix); //将四元数矩阵化
eye *= Matrix;
center *= Matrix;
gluLookAt(eye.x + m_Position.x,eye.y + m_Position.y,eye.z + m_Position.z, center.x + m_Position.x,center.y + m_Position.y,center.z + m_Position.z,0,1,0);
其中四元数可以直接百度“glQuaternion" 可以找到矩阵化的算法,向量和矩阵相乘你也可以找到一些资料的。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询