Question

I'm trying to make it so that no matter how far apart two objects are they'll both remain on screen. I'm using JOGL, but that shouldn't matter as I just need help with the math. This is what I have so far:

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);

What is the math I need so the Z zooms in and out correctly?

Was it helpful?

Solution 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);

OTHER TIPS

If both objects have z=0, and your screen viewing angle (from the center of the screen to an edge) is ax and ay for the horizontal and vertical angles, then:

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

and

camz = max(zx, zy)

Here zx and zy are the distances to get the objects onto the horizontal and vertical dimensions of the screen, and camz is the distance that satisfies both criteria. Also note that ax and ay are in radians (for example, if you assume your screen is 40 deg wide, then ax is 20 deg, or ax =20*(pi/180)=0.3419 radians).

Your values for camx and camy were correct.

Maybe I'm misunderstanding your situation, but couldn't you just do

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

That would position the camera directly between the two objects.

Should it need to be corrected as,

float distance = (float) ((Math.sqrt((p1.x - p2.x)^2 + (p1.y - p2.y)^2)));

I am not prettey sure about the Syntax. I am just telling you need to get the power of 2 before adding vectors.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top