hckr
hckr

Reputation: 5583

How to zoom to fit 3D points in the scene to screen?

I store my 3D points (many points) in a TGLPoints object. There is no other object in the scene than points. When drawing the points, I would like to fit them to the screen so they do not look far away or too close. I tried TGLCamera.ZoomAll but with no success and also the solution given here which adjusts the camera location, depth of view and scene scale:

objSize:=YourCamera.TargetObject.BoundingSphereRadius;
if objSize>0 then begin
    if objSize<1 then begin
        GLCamera.SceneScale:=1/objSize;
        objSize:=1;
    end else GLCamera.SceneScale:=1;

    GLCamera.AdjustDistanceToTarget(objSize*0.27);
    GLCamera.DepthOfView:=1.5*GLCamera.DistanceToTarget+2*objSize;
end;

The points did not appear on the screen this time.

What should I do to fit the 3D points to screen?

Upvotes: 0

Views: 548

Answers (1)

Paritosh Kulkarni
Paritosh Kulkarni

Reputation: 862

For each point build the scale factor by taking length of vector from points position to camera position. Then using this scale build your transformation matrix that you will apply to camera matrix. If scale is large that means point is farther you will apply reverse translation to bring that point in close proximity. I hope this is clear. To compute translation vector use following formula

translation vector = translation vector +/- (abs(scale)/2)

+/- will be decided by the scale magnitude if it is too far from camera you chose - in above equation.

Upvotes: 0

Related Questions