0

8 つの頂点を持つ立方体をレンダリングしています。立方体を回転させたり近づけたりすると、一部の頂点がニア クリッピング プレーンによってクリッピングされる場合があります。ただし、私の問題では何らかの理由で、立方体の端にある交点をニア クリッピング プレーンと見つける必要があります。ポイント数が変動することは承知しております。だから私が考えたのは、ニアクリッピングプレーン(おそらく目の空間で-しかしどうやって?)を取得し、マトリックスの逆計算を行ってキューブのオブジェクト空間で座標を取得することでした。その後、交差点を見つけて問題を解決できます。しかし、ここでの問題は次のとおりです。

  1. ニア クリッピング プレーンの各コーナーの座標を取得するにはどうすればよいですか? (または平面方程式の係数)
  2. オブジェクト空間に戻るにはどうすればよいですか?

テスト:

座標を正しく取得できるかどうかを確認するためのテストとして、これを試しました。MVM (ModelView Matrix) と PM (Projection Matrix) の逆を取得することを試みました。そして、V1 = (-1,-1,-1,1)、V2 = (1, -1, -1, 1)、V3 = (1, 1, -1, 1) を持つニア クリッピング プレーンを想像してみました。 、および V4 = (-1, 1, -1, 1) 座標。だから私は4つの頂点のそれぞれに対してこれを行うかどうか考えていました:

V1 = IMVM * (IPM * V1);

V2 = IMVM * (IPM * V2);

V3 = IMVM * (IPM * V3);

V4 = IMVM * (IPM * V4);

ここで、IMVM はモデル ビュー マトリックスの逆数であり、IPM は射影マトリックスの逆数です。次に、これらの 4 つのポイントを現在ロードされている行列 (の逆数を使用したもの) でレンダリングすると、逆乗算が openGL の現在ロードされている行列との乗算によってキャンセルされているはずなので、画面の前に立っている敷居の正方形が表示されます。 . でもなぜかうまくいかず、転置してノーマルにしてみました。コラムメジャーなどに気をつけていたのですが、うまくいかないようで、スチル(ニアクリッピングプレーン)ではなく、常に動いたり飛び跳ねたりするプレーンになってしまいます!!

4

1 に答える 1

0

このフォーラムでの私の質問はすべて自分で答えられるようです! まず考えてみると、射影行列の逆行列は必要ないことに気付きました。カメラ空間でポイントを指定し、それらをオブジェクト空間に戻すには、モデルビュー マトリックスの逆行列が必要です。

あなたを殺すエラーでいつもそうであるように、私のベクトル行列乗算計算には論理エラーがありました。オンラインの行列計算機で再確認したところ、最初の要素は正しいが、残りの要素は正しくないことに気付きました。そのとき、乗算しているのと同じ行列に結果を格納していて、その結果、元の行列を変更しているだけであることがわかりました。そのため、結果に新しいマトリックスを追加しただけで、すべて正常に機能しました。基本的に、ポイントを指定し、モデル ビュー マトリックスの逆数を掛けて、オブジェクト空間座標のポイントを取得しました。

于 2013-03-05T18:33:38.117 に答える