2

これはかなり複雑な説明になるので、我慢してください。3D空間では、プレーヤーには、x軸とy軸を中心とした回転という2つの回転値があります。ビュー距離を指定して、プレーヤーのビューポートの中心にあるポイントを計算しました。これは、ビュー距離から離れています(以下を参照)。

ここに画像の説明を入力してください

  • 「vd」はビュー距離です
  • 「c」は値の所有者です
  • '(x、y、z)'は計算されるポイントです
  • 「rot.x」と「rot.y」は、それぞれx軸とy軸を中心とした回転です。

このポイント(x、y、z)が与えられた場合、この位置を基準にして4つのポイントを計算する必要があります(以下を参照)。

ここに画像の説明を入力してください

  • '(x2、y2、z2)'、'(x3、y3、z3)'などは私が計算する必要があるポイントです。
  • 緑の平面の幅と高さは既知です。それぞれを「w」と「h」と呼びましょう。

最初のグラフのすべての値(回転など)にアクセスできるので、4つのポイントのそれぞれをどのように計算できますか?

少し背景..私は錐台カリングと呼ばれるカリング方法のためにこれを行っています。レンダリングを高速化し、GPUの料金を削減するために、LWJGLでこれを実行しようとしています。私はこの計算の三角法を理解することができませんでした、そして私は過去数時間試みてきました。どんな助けでも大歓迎です。さらに説明/説明が必要な場合は、お知らせください。ありがとう。

編集:また、ポイントは同じ平面上にあり、ポイント(x、y、z)とともにx軸とy軸を中心に回転する必要があります。

4

1 に答える 1

2

回転順序が最初にX、次にY回転であると仮定すると、行列の計算は次のようになります。

V * Ry * Rx

Vベクトルが確立されたので。

V = [view_distance、tan(22.5)* view_distance、tan(22.5)* view_distance *(WIDTH / HEIGHT)]

それからそれは意味します:

X2 = cos(rot.Y) * view_distance - 
     (tan(22.5) * WIDTH * view_distance * sin(rot.Y))/HEIGHT
Y2 = tan(22.5) * cos(rot.X) * view_distance + 
     (tan(22.5) * WIDTH * cos(rot.Y) * view_distance * sin(rot.X))/HEIGHT +
      view_distance * sin(rot.X) * sin(rot.Y)
Z2 = (tan(22.5) * WIDTH * cos(rot.X) * cos(rot.Y) * view_distance)/HEIGHT - 
     tan(22.5) * view_distance * sin(rot.X) +
     cos(rot.X) * view_distance * sin(rot.Y)

たとえば、すべての式からビュー距離を除外できるため、式をもう少し簡略化できます。これを計算するのは少し無意味であり、エラーが発生しやすいidは、はるかに簡単なものとして、数値を含む行列関数を使用することを好みます。

PS:マトリックス表記は、あなたの目とプログラミング経験にとってはるかに簡単です。

于 2012-12-10T20:56:02.460 に答える