8

Android の frustumM の動作がおかしいようです。OpenGL レッド ブックを確認すると、生成された行列は次のようになります: (ソース: glprogramming.com ) Songho.ca はこれに同意しているようです: (ソース: songho.ca )







ただし、Android の frustumM では 1 つのコンポーネントが 2 倍され、他のサンプル マトリックスではそうではありません。これが何をしているように見えるかです:

最初の行、3 番目の列を除いて、すべてが機能的に一致しているようです。なぜそれが2倍になるのですか?3 番目の列の最初の 3 つの要素を生成する android.opengl.Matrix の frustumM メソッドのコード行を次に示します。

final float A = 2.0f * ((right + left) * r_width);
final float B = (top + bottom) * r_height;
final float C = (far + near) * r_depth;

r_width、r_height、r_depth を次のように定義します。

final float r_width  = 1.0f / (right - left);
final float r_height = 1.0f / (top - bottom);
final float r_depth  = 1.0f / (near - far);

「最終フロート A」で始まる行は、誤って 2 を掛けているように見えます。

これは Android のコードの間違いですか、それとも単に何か足りないのでしょうか? 錐台が対称である場合、用語が相殺されることを私は知っています。非対称の錐台を使用してコードを実行すると、生成される行列は実際には異なり、同じベクトルにそれらの異なる行列を乗算した場合の結果のベクトルも異なります。

4

3 に答える 3

4

Androidのバグです。http://code.google.com/p/android/issues/detail?id=35646をご覧ください。

于 2012-08-01T16:31:32.060 に答える
1

はい、(-ratio, ratio, -1, 1, 1, 10) パラメーターを設定して関数を呼び出すと、問題は発生しませんが、(right != -1 * left) で呼び出すと、問題が発生します。物事を違うものにします。

ソースコードを確認すると、この問題が見つかりました。はぁ。

于 2013-11-21T04:22:04.997 に答える
1

((コメントだけしたいのですが、許可されていません。))

洞察力をありがとう。追加するしかなかった

mMyMatrix[8] /= 2f;

Matrix.frustrumM(mMyMatrix, ...)

私のアスペクト比の問題を解決するには:)

于 2013-06-06T23:10:09.593 に答える