位置、回転、および平行移動ベクトルのみを保持する (またはユーザーにのみ表示される) ユーザー Firendly 変換クラス (例として Unity) を作成しようとしています。
glTranslate、glRotate、glScale 関数を使用すると、OpenGL に変換を簡単に適用できます。オブジェクトが描画される前に、各オブジェクトの Transform メソッドを呼び出しています。しかし、回転による位置の変更に問題があります。これが私のコードです。
// オブジェクトのレンダリング メソッドのサンプル
void Render()
{
glPushMatrix();
glMatrixMode(GL_MODELVIEW);
transform->Transform();
glEnable(GL_COLOR_MATERIAL);
glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_COLOR_ARRAY);
glColorPointer(3, GL_FLOAT, 0, m_colors->constData());
glVertexPointer(3, GL_FLOAT, 0, m_positions->constData());
glDrawArrays(GL_LINES, 0, 6);
glDisable(GL_COLOR_MATERIAL);
glDisableClientState(GL_VERTEX_ARRAY);
glDisableClientState(GL_COLOR_ARRAY);
glPopMatrix();
}
// 変換クラス
class Transformation
{
public:
QVector3D Position;
QVector3D Rotation;
QVector3D Scale;
Transformation()
{
Position = QVector3D(0.0f, 0.0f, 0.0f);
Rotation = QVector3D(0.0f, 0.0f, 0.0f);
Scale = QVector3D(1.0f, 1.0f, 1.0f);
}
~Transformation()
{
}
void Translate(const QVector3D& amount)
{
}
void Rotate(const QVector3D& amount)
{
Rotation += amount;
Rotation.setX(AdjustDegree(Rotation.x()));
Rotation.setY(AdjustDegree(Rotation.y()));
Rotation.setZ(AdjustDegree(Rotation.z()));
}
void Transform()
{
// Rotation
glRotatef(Rotation.x(), 1.0f, 0.0f, 0.0f);
glRotatef(Rotation.y(), 0.0f, 1.0f, 0.0f);
glRotatef(Rotation.z(), 0.0f, 0.0f, 1.0f);
// Translation
glTranslatef(Position.x(), Position.y(), Position.z());
// Scale
glScalef(Scale.x(), Scale.y(), Scale.z());
}
};
どうすれば翻訳できますか?