簡體   English   中英

打開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]

其中,矢量[abc],[def]和[ghi]代表旋轉的局部坐標系的x軸,y軸和z軸。 當您想應用旋轉時,首先,它應表示為圍繞指定軸(或四元數,但不要超越自己)的角度。 您可以計算該旋轉的變換矩陣,並將其應用於M中的每個軸矢量。然后,在渲染時,在渲染對象之前將M用作最右邊的變換。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM