如何缩放以适应场景中的3D点进行屏幕显示?

时间:2017-12-13 08:46:52

标签: delphi opengl 3d glscene

我将3D点(许多点)存储在TGLPoints对象中。场景中没有其他对象而不是点。绘制点时,我想将它们放到屏幕上,这样它们看起来不会太远或太近。我尝试了TGLCamera.ZoomAll,但没有成功,而且还提供了here解决方案来调整相机位置,景深和场景比例:

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;

这次点数没有出现在屏幕上。

我应该怎么做才能将3D点适合屏幕?

1 个答案:

答案 0 :(得分:0)

对于每个点,通过从点位置到摄像机位置获取矢量长度来构建比例因子。然后使用此比例构建您将应用于相机矩阵的变换矩阵。如果比例很大意味着点越远,您将应用反向平移以使该点靠近。我希望这很清楚。要计算平移向量,请使用以下公式

平移向量=平移向量+/-(abs(scale)/ 2)

如果距您选择的相机太远,

+/-将由比例幅度决定 - 在上面的等式中。