3

CMLを使用して、仕事用に作成している OpenGL ベースのインターフェイス プロジェクトで 3D 数学を管理しています。カメラを表す 4x4 マトリックスの一部として保持されている、視点からの特定の距離における視錐台の幅を知る必要があります。私の目標は、GUI オブジェクトをビューポートの見かけの端に沿って配置することですが、ニア クリッピング プレーンから画面に少し離れた位置に配置します。

CML には錐台の平面を抽出し、Ax + By + Cz + D = 0 の形式で返す機能があります。この錐台はカメラに対して垂直であり、必ずしも透視投影の z 軸と一致するとは限りません。

カメラからの距離が異なる画面の側面にグラフィック要素を固定するために、x 座標と z 座標を抽出したいと思います。それを行うための最良の方法は何ですか?

ありがとう!

4

1 に答える 1

2

これは、頂点から既知の距離の既知の幅の断面がすでにある場合、ピラミッド錐台/切り詰められたピラミッドの断面の辺の長さを見つけることの複製のようです。それがなく、自分で答えを導き出したい場合は、次の手順に従うことができます。

  1. 2つの隣接する平面を取り、それらの交線L1を見つけます。こちらの手順を使用できます。本当に必要なのは、線の方向ベクトルです。
  2. 前の手順と同じ2つの平面を取り、それらの交線L2を見つけます。
  3. Ax + By + Cz + D = 0の形式のすべての平面が原点を通過するため、L1とL2が交差していることがわかります。
  4. L1とL2の方向ベクトル、原点の尾の図を自分で描きます。これらは角度を形成します。それをシータと呼んでください。2つのベクトル間の角度の式を使用してシータを見つけます(例:ここ) 。
  5. その角度の二等分線を描きます。原点から必要な距離dで二等分線に垂線を描きます(これにより、2つの合同な直角三角形に二等分された二等辺三角形が作成されます)。垂線の長さは、希望する錐台幅wです。wは、直角三角形の底辺の1つの長さの2倍であることに注意してください。
  6. rを直角三角形の斜辺の長さとします。次に、r cos(theta / 2)=dおよびrsin(theta / 2)= w / 2であるため、tan(theta / 2)=(w / 2)/ dは、w = 2d * tan(theta / 2)を意味します。 。dとthetaを知っているので、これで完了です。

錐台の断面の片側の長さがわかったことに注意してください。これは、錐台の垂直断面で機能します。これを拡張して、垂直でない断面に適合させることができます。

于 2010-04-10T04:05:15.720 に答える