0

私はopnegl(古いもの、現代のopenglの人には申し訳ありません)で遊んでおり、マトリックスを理解しglRotatefglTranslatefなどをに置き換えようとしていglLoadMatrixfます。

回転なし、平行移動なし、スケールなしで行列を設定する方法がわかりません。単位行列を使用できると思いましたが、機能しません。

次のようなマトリックスが必要です。

glPushMatrix();
{
    drawMyCube();
}
glPopMatrix();

は次のように書くことと同じです:

glPushMatrix();
{
    glLoadMatrixf( myCubeTransform.getTranspose() );
    drawMyCube();
}
glPopMatrix();

次のようなものがある場合:

/* 1: */ // glLoadMatrixf( myCubeTransform.getTranspose() );
/* 2: */ // glLoadIdentity();

そもそも myCubeTranform Matrix4 クラスを使用することを考えました (そして、行優先の行列クラスを使用しているため、opengl の列優先の順序に一致させるには getTranspose() を使用する必要があります) が、機能しないため、以前glLoadIdentityは私のMatrix4クラスを台無しにしないようにしてください(マトリックスコードのバグですか?)そして..どちらも機能しません。

だから私の質問:変換なし、回転なし、スケールなしで変換行列を設定する方法は?

「動作しない」とは、キューブが原点 (あるべき場所) にないことを意味します。実は全然見えない(多分視錐台の外に描かれている?)

4

1 に答える 1

0

glLoadMatrixは、マトリックス スタックの一番上にあるものを置き換えます。つまり、おそらく以前に行ったビュー設定が無効になることを意味します。選択する必要があります。ビュー部分を自分で実装し、モデル変換でそれを事前に乗算します。または(学習目的で)現在glLoadMatrixがある場所の代わりにglMultMatrixを使用します。

于 2013-09-09T10:37:45.203 に答える