3DカメラズームとJavaで物理学に従ってください?
質問
私は関係なく、どのように離れて二つのオブジェクト、彼らは両方の画面上に残りますされているように、それを作るしようとしています。私は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
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);
他のヒント
両方のオブジェクトは、z = 0を有し、(エッジの画面のの中心からの)視野角画面は、次いで、水平方向および垂直方向の角度に対してAX及びAYの場合:
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は両方の基準を満足する距離です。また、ラジアンであること斧とyの点に注意してください(あなたの画面が40度の幅であると仮定した場合、たとえば、その後、斧は20度、または斧である= 20 *(PI / 180)= 0.3419ラジアン)。
camxとCAMYのためのあなたの値は正しかった。
たぶん私はあなたの状況を誤解していますが、あなただけの
行うことができませんでした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つのオブジェクト間で直接カメラを位置決めすることになる。
それはとして修正する必要がある場合、
フロート距離=(フロート)((Math.sqrt((p1.x - p2.x)^ 2 +(p1.y - p2.y)^ 2)));
私は、構文わからpretteyておりません。私はちょうどあなたがベクトルを追加する前に、2のべき乗を取得する必要があります言っています。
所属していません StackOverflow