0

2つのオブジェクトがどれだけ離れていても、両方が画面に残るようにしようとしています。私は JOGL を使用していますが、数学の助けが必要なだけなので、それは問題ではありません。これは私がこれまでに持っているものです:

float distance = (float) ((Math.sqrt((p1.x - p2.x) + (p1.y - p2.y))));
float camx = (float)((p1.x + p2.x) * 0.5);
float camy = (float)((p1.y + p2.y) * 0.5);
float camz = (float) (distance * 5);

Zが正しくズームインおよびズームアウトするために必要な数学は何ですか?

4

4 に答える 4

3

両方のオブジェクトの z=0 があり、画面の視野角 (画面の中心から端まで) が水平角度と垂直角度の ax と y である場合:

zx = abs((p1.x-p2.x)*0.5)/tan(ax)
zy = abs((p1.y-p2.y)*0.5)/tan(ay)

camz = max(zx, zy)

ここで、zx と zy はオブジェクトを画面の水平方向と垂直方向の寸法に収めるための距離であり、camz は両方の基準を満たす距離です。また、ax と ay の単位がラジアンであることにも注意してください (たとえば、画面の幅が 40 度であると仮定した場合、ax は 20 度、つまり ax =20*(pi/180)=0.3419 ラジアン)。

camx と camy の値は正しかったです。

于 2009-05-16T03:08:48.460 に答える
2

たぶん私はあなたの状況を誤解していますが、あなたはできませんでした

float camx = (p1.x + p2.x) * 0.5;
float camy = (p1.y + p2.y) * 0.5;
float camz = (p1.z + p2.z) * 0.5;

これにより、カメラが 2 つのオブジェクトの間に直接配置されます。

于 2009-05-16T00:31:32.457 に答える
1

次のように修正する必要がある場合は、

フロート距離=(フロート)((Math.sqrt((p1.x --p2.x)^ 2 +(p1.y --p2.y)^ 2)));

構文についてはよくわかりません。ベクトルを追加する前に、2の累乗を取得する必要があると言っています。

于 2009-05-16T01:58:52.373 に答える
0
float distance = (float) ((Math.sqrt(Math.pow((p1.x - p2.x),2.0) + Math.pow((p1.y - p2.y), 2.0))));
float camx = (float)((p1.x + p2.x) * 0.5);
float camy = (float)((p1.y + p2.y) * 0.5);
float camz = (float) Math.abs(distance);
于 2009-05-17T18:53:56.540 に答える