gluProjectにNDS?
-
22-09-2019 - |
質問
って苦しむことが。ようにしているときの画面座標の頂点の組み合わせで構成モデルの画面のNDS用devKitPro.図書館のように実施の一部の機能OpenGLので、特に、gluProject機能が欠けている(い)をいっぱいで仕分けもバッチリでうれます。
っていうのが現在の計算のときの画面座標の動の予測matriciesに格納されているのDSのレジスタがなんと同意を得なければならない、もしようとした場合には投影行列のゼロから基づくOpenGLの書です。こちらのコード私を利用することにしたのだろう:
void get2DPoint(v16 x, v16 y, v16 z, float &result_x, float &result_y)
{
//Wait for the graphics engine to be ready
/*while (*(int*)(0x04000600) & BIT(27))
continue;*/
//Read in the matrix that we're currently transforming with
double currentMatrix[4][4]; int i;
for (i = 0; i < 16; i++)
currentMatrix[0][i] =
(double(((int*)0x04000640)[i]))/(double(1<<12));
//Now this hurts-- take that matrix, and multiply it by the projection matrix, so we obtain
//proper screen coordinates.
double f = 1.0 / tan(70.0/2.0);
double aspect = 256.0/192.0;
double zNear = 0.1;
double zFar = 40.0;
double projectionMatrix[4][4] =
{
{ (f/aspect), 0.0, 0.0, 0.0 },
{ 0.0, f, 0.0, 0.0 },
{ 0.0, 0.0, ((zFar + zNear) / (zNear - zFar)), ((2*zFar*zNear)/(zNear - zFar)) },
{ 0.0, 0.0, -1.0, 0.0 },
};
double finalMatrix[4][4];
//Ugh...
int mx = 0; int my = 0;
for (my = 0; my < 4; my++)
for (mx = 0; mx < 4; mx++)
finalMatrix[mx][my] =
currentMatrix[my][0] * projectionMatrix[0][mx] +
currentMatrix[my][1] * projectionMatrix[1][mx] +
currentMatrix[my][2] * projectionMatrix[2][mx] +
currentMatrix[my][3] * projectionMatrix[3][mx] ;
double dx = ((double)x) / (double(1<<12));
double dy = ((double)y) / (double(1<<12));
double dz = ((double)z) / (double(1<<12));
result_x = dx*finalMatrix[0][0] + dy*finalMatrix[0][1] + dz*finalMatrix[0][2] + finalMatrix[0][3];
result_y = dx*finalMatrix[1][0] + dy*finalMatrix[1][1] + dz*finalMatrix[1][2] + finalMatrix[1][3];
result_x = ((result_x*1.0) + 4.0)*32.0;
result_y = ((result_y*1.0) + 4.0)*32.0;
printf("Result: %f, %f\n", result_x, result_y);
}
多くのシフト、DSの作品の内部を固定小数点表記しに変換する必要があることを兼用することが可能です。どのようになっているようになるとやや正しいのピクセル翻訳が完璧について知っておきましょ利用quadことになるの画面が回転するwonky.また、私の投影行列を占める、画面の幅と高さは?) のんを使用する必要がないようです。なに投影するマトリクスを達成するため、次に画面解してもらえますか?
んになって新しい、もらって公正な把握に関行列の数学、がん、熟練したいと思いる3Dグラフィックんだのですが、さらに3次元-非変形の座標モデルの頂点ともにmatriciesへの応用が見込まれているので、実際の画面座標を使用せずにOpenGLのgluProject機能しているのでしょうか。きもの大胆な試みであるという明白な事実ん足りない私のコードについて教えてください。(思を明確に可能な場合、この荒れるこのプロトタイプであるように、清潔な優先度の高い)
おかげろ!
PS:私の理解ではcurrentMatrix、引きから、DSの登録、 すべ きを与えてくれたの投写、翻訳、および回転行列、サイズを変更する機能を提供でき、正確なマトリクスが使用されるのか、翻訳のDS独自のハードウェアは、少なくとも仕様に合わせてでGBATEK.に実践するものではありませんかび上がるようなの射影座標に適用するかは、あなたの私の課題です。でもなんなのか、計算、見通し自分な生成によって、異なる結果が生
解決
ることはほとんど正しい。
正しいステップ:
掛けModelviewと投影行列としてすでにみんなかった).
の延長は次の3部分の頂点への均一な調整を加えるW-コンポーネントの値が1になりました。E.g(x、y、zのベクトルが(x,y,z,w)w=1です。
ここまでのベクトルのマトリクス製品です。お母さ4x4、ベクトルのサイズ4.その結果、ベクトルのsize4どん落w真.この増殖はベクトルのクリップ-スペース。参考:できていないカップルでの非常に便利なものがこちらにこのベクトル:試験の場合は画面に表示します。六条件:
x < -w : Point is outside the screen (left of the viewport) x > W : Point is outside the screen (right of the viewport) y < -w : Point is outside the screen (above the viewport) y > w : Point is outside the screen (below the viewport) z < -w : Point is outside the screen (beyond znear) z > w : Point is outside the screen (beyond zfar)
- プロジェクトメントへの2次元空間です。このためには分割xおよびy w:
x' = x / w; y' = y / w;
- について興味のある方はもちろんの奥行き値(何が書き込まれ、zbufferきプロジェクトzなどの
z' = z / w
なお、前のステップ動作しませんがwはゼロです。この場合happendsの場合は等しいカメラの位置にします。最なにができるこの場合は、x',y'をゼロになります。(移動の点のセンターの画面で、次のステップ..).
最終ステップ:のOpenGLビューの座標に適用す:
x_screen = viewport_left + (x' + 1) * viewport_width * 0.5; y_screen = viewport_top + (y' + 1) * viewport_height * 0.5;
- 重要:Y座標の画面が忠実に再現しています。逆にその他の多くのグラフィックApiはOpenGL y=0のときは、下の画面になります。
ることはありません。
他のヒント
ますりんでいきたいと考えてニルス'を徹底して解答すること。
- なが表示されます。私は知らないNDSなものかどうか疑問を持つものであるハードウェアのためのダブルmath.
- また間違いモデルビューおよび予測されていない掛け合いのハードウェアが登録する俺の、ハードウェアプラットフォームを使用しないのMVPに登録します。
- のマトリクスへの保存登録することができますのと同じ順序としてOpenGL.もし接触していない場合、その増殖は行列-ベクトルに必要なのです。