2017-12-03 15 views
0

を変形させ、その配向性は、四元数であり、私はそれ回転したいですY軸の度数です。GLMが、私はゲームオブジェクトを持って、私はC++で自分のゲームエンジンを実装していると私はここに助けが必要、</p> <p>オブジェクト

だから、私が持っている:

currentAngle += 0.01; // currentAngle is a member variable, so yes i initialized it 
quat q(currentAngle, vec3(0, 1, 0)); 
myGameObject->SetOrientation(q); 

GameObject::SetOrientation(quat q) 
{ 
myOrientation = q; 
} 

が、ゲームオブジェクトの回転に伴って、それはまた、(変形)スケーリングします。だから私は、私は変換行列に

myModelMatrix = Math::CreateTransformationMatrix(
    transformation->GetPosition(), 
    transformation->GetOrientation(), 
    transformation->GetScale()); 


mat4& Math::CreateTransformationMatrix(vec3& translation, quat& orientation, vec3& scaleSize) 
{ 

    mat4 translate = glm::translate(glm::mat4(), translation); 
    mat4 rotate = glm::toMat4(orientation); 
    mat4 scale = glm::scale(glm::mat4(), scaleSize); 

    return translate * rotate * scale; 
} 

を適用していますどのように確認されたが、それは(少なくとも私には)OKに見えますが、私はスケール行列が何らかの形で私はそれで何かをやっていたかどうかを確認するための乗算を形成取り除きます。しかし、それは何も修正しませんでした。

私も試してみました:

quat q(currentAngle, vec3(0, 1, 0)); 
    quat orientation = myGameObject->GetOrientation(); 
    orientation = orientation *q; 
    myGameObject->SetOrientation(orientation); 

しかし、それはどちらかの作業をdidntの。 私はシェイダーのコードもチェックしましたが、私は問題はありません。

これは私がシェーダに行列を送る方法です:

glUseProgram(progarmId);1 
    glUniformMatrix4fv(uniforms[name], 1, GL_FALSE, glm::value_ptr(matrix)); 

私はTrueに3番目のパラメータを変更し、投影図の行列乗算の順序を交換しようと、それが動作didntのいずれか:/

だから、みんな...私は間違って何をすることができますか?私はアイディアがありません:/

+0

どこで、どのように 'myOrientation'フィールドである私がやっていた

中古? – meowgoesthedog

+0

@ myowgoesthedog myOrientationへのミューテータはmyGameObject-> GetOrientation()です.Math :: CreateTransformationMatrixの呼び出しで使用されます – Camilo

答えて

-1

私はGLMの経験はありませんが、私たちのコードはOKです。問題はあなたが投稿したコードの外にあると私は思う。

あなたのワールド*ビュー*投影行列を計算してシェーダに渡すコードでもかまいません。乗算命令を反転させてみてください。

頂点シェーダに存在する可能性があります。

また、一部のプラットフォーム/フレームワークでは、GPUに渡すときに行列を転置する必要があります。

+0

返信いただきありがとうございます。私の質問が更新されました – Camilo

+0

アイデアはありません。デバッガを試すことができます:https://renderdoc.org/ – Soonts

0

私はそれを理解しました。

currentAngle += 0.01; // currentAngle is a member variable, so yes i initialized it 
quat q(currentAngle, vec3(0, 1, 0)); 
myGameObject->SetOrientation(q); 

をクワッドがそう終わり、GLMから軸方法に角度を使用して最初に変換する必要があります:

currentAngle = 0.01; // currentAngle is a member variable, so yes i initialized it 
    //quat q(currentAngle, vec3(0, 1, 0)); 
    vec3 up(0, 1, 0); 
    quat q = glm::angleAxis(currentAngle, up); 
    GameObject->Rotate(q); 
関連する問題