我将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点适合屏幕?
答案 0 :(得分:0)
对于每个点,通过从点位置到摄像机位置获取矢量长度来构建比例因子。然后使用此比例构建您将应用于相机矩阵的变换矩阵。如果比例很大意味着点越远,您将应用反向平移以使该点靠近。我希望这很清楚。要计算平移向量,请使用以下公式
平移向量=平移向量+/-(abs(scale)/ 2)
如果距您选择的相机太远,+/-将由比例幅度决定 - 在上面的等式中。