Open GL增加对象的旋转速度
Open GL Adding rotation speed on objects
我目前正在做一个小项目,试图在我的对象上添加一些旋转速度,这样他们就可以自己旋转。我试了下面的方法,但是没有成功。
下面是我正在处理的代码片段:
ObjetDeJeu::ObjetDeJeu(glm::vec3 pPosition)
: mPosition(pPosition), mOrientation(0,0,0), mSpeed()
{
}
//----------------------------------------------------------------------//
ObjetDeJeu::~ObjetDeJeu()
{
}
//----------------------------------------------------------------------//
void ObjetDeJeu::setVitesse(glm::vec2 pVitesse)
{
mVitesse = pVitesse;
}
//----------------------------------------------------------------------//
void ObjetDeJeu::addSpeed(glm::vec2 pSpeedToAdd)
{
mVitesse += pVitesseToAdd;
}
//----------------------------------------------------------------------//
glm::vec3 ObjetDeJeu::getPosition_ParentSpace()
{
return mPosition;
}
//----------------------------------------------------------------------//
glm::vec3 ObjetDeJeu::getOrientation_ParentSpace()
{
return mOrientation;
}
//----------------------------------------------------------------------//
void ObjetDeJeu::setPosition_ParentSpace(glm::vec3 pPosition)
{
mPosition = pPosition;
}
//----------------------------------------------------------------------//
void ObjetDeJeu::setOrientation_ParentSpace(glm::vec3 pOrientation)
{
mOrientation = pOrientation;
}
//----------------------------------------------------------------------//
void ObjetDeJeu::rotateZ(float angleDegree)
{
mOrientation.z += angleDegree;
if( mOrientation.z >= 180.0f )
{
mOrientation.z -= 360.0f;
}
if( mOrientation.z < -180.0f )
{
mOrientation.z += 360.0f;
}
}
//----------------------------------------------------------------------//
glm::mat4x4 ObjetDeJeu::getTransform_ParentSpace()
{
glm::mat4x4 lTransfo;
lTransfo = glm::translate( lTransfo , mPosition);
lTransfo = glm::rotate(lTransfo, mOrientation.z, glm::vec3(0,0,1));
lTransfo = glm::rotate(lTransfo, mOrientation.y, glm::vec3(0,1,0));
lTransfo = glm::rotate(lTransfo, mOrientation.x, glm::vec3(1,0,0));
return lTransfo;
}
//----------------------------------------------------------------------//
bool ObjetDeJeu::touche(ObjetDeJeu* obj)
{
}
//----------------------------------------------------------------------//
void ObjetDeJeu::deplace(float dt)
{
// vitesse * temps ecoule == deplacement.
glm::vec3 deplacement = glm::vec3(mSpeed*dt, 0);
mPosition += deplacement;
}
//----------------------------------------------------------------------//
void ObjetDeJeu::dessiner()
{
glBegin(GL_TRIANGLES);
glTexCoord2f(0.0,0.0);
glVertex3f(-1.0f,-1.0f, 0.0f);
glTexCoord2f(1.0,0.0);
glVertex3f(1.0f,-1.0f, 0.0f);
glTexCoord2f(0.5,1.0);
glVertex3f(0.0f, 3.0f, 0.0f);
glEnd();
}
您正在使用方向向量作为一组与轴对齐的旋转。这可能不是你想要的。
你可以管理旋转作为一个局部坐标系矩阵,你应用作为一个单一的变换:
M = [a d g 0]
[b e h 0]
[c f i 0]
[0 0 0 1]
其中向量[a b c], [d e f]和[g h i]表示旋转后的局部坐标系的x、y和z轴。当你想要应用旋转时,首先,它应该表示为围绕指定轴的角度(或四元数,但我们不要过于超前)。您计算此旋转的变换矩阵,并将其应用于M中的每个轴向量。然后,在渲染时,在渲染对象之前将M应用为最右边的变换。
相关文章:
- 与互斥锁相比,旋转锁可以保证上下文切换
- 为什么在读取文件大小时文件IO速度会发生变化
- 绘制旋转的三角形
- 旋转模型矩阵时的形状失真
- 四边形的 2D 旋转
- 为什么std::condition_variable notify_all的工作速度比notify_one快(对于随机请
- 文件系统:复制功能的速度秘诀是什么
- 垂直方向的 Gtk3+ 旋转按钮 (c/c++)
- 学习多线程C++:添加线程不会使执行速度更快,即使它看起来应该
- 发布旋转矩阵(openGL/glm)
- 顺时针迭代旋转 3 位数字
- 形状对象的旋转和缩放不正确C++
- 如何在 OpenSceneGraph 中缩放/旋转/移动资产
- 在C++中使用并行化的预期速度是多少(不是 OpenMp,而是 <thread>)
- 如何有效地计算将单位立方体映射到自身的反射和旋转?
- 两个连续的 OpenMP 并行区域会相互减慢速度
- 子轴围绕父轴而不是他自己的轴旋转
- OpenGL对象在PC上以正常速度旋转,但在笔记本电脑上非常快
- Open GL增加对象的旋转速度
- 获取磁盘示例代码的旋转速度