C++ 在轨道相机上实现变焦
我想放大轨道相机的目标 使用如下功能操作相机:C++ 在轨道相机上实现变焦,c++,camera,C++,Camera,我想放大轨道相机的目标 使用如下功能操作相机: moveCamera(x,y,z); 根据角度值x,y,z应该不同,以获得正确的缩放功能,但我不能想出一个方法来做到这一点 我使用的函数有getCameraposx,getTargetposy等。。获取目标和摄像机的坐标 在Pigben的帮助下Zoom现在可以工作了,但我遇到了一个问题。放大没有问题,但放大太近后,缩小停止工作。离得太近了,我还很远 这是我的缩放功能 void Camera::orbZoom(bool Zoo) { flo
moveCamera(x,y,z);
根据角度值x,y,z应该不同,以获得正确的缩放功能,但我不能想出一个方法来做到这一点
我使用的函数有getCameraposx
,getTargetposy
等。。获取目标和摄像机的坐标
在Pigben的帮助下Zoom现在可以工作了,但我遇到了一个问题。放大没有问题,但放大太近后,缩小停止工作。离得太近了,我还很远
这是我的缩放功能
void Camera::orbZoom(bool Zoo)
{
float x;
float y;
float z;
float xc;
float yc;
float zc;
float zoom;
x=getTargetposx();
y=getTargetposy();
z=getTargetposz();
xc=getCameraposx();
yc=getCameraposy();
zc=getCameraposz();
xc=xc-x;
yc=yc-y;
zc=zc-z;
if ( ivan==true){
zoom = 1.02;
if (xc<1){xc=+1.5;}
else if (yc<1){yc=+1.5;}
else if (zc<1){zc=+1.5;}
xc=xc*zoom;
yc=yc*zoom;
zc=zc*zoom;
}
if(ivan==false) {
zoom = 0.98;
xc=xc*zoom;
yc=yc*zoom;
zc=zc*zoom;
}
xc=xc+x;
yc=yc+y;
zc=zc+z;
camerapos.assign(xc,yc,zc);
从摄影机位置减去目标位置,然后缩放它,然后再次添加目标位置
camera_position -= target_position;
camera_position /= zoom_factor;
camera_position += target_position;
关于你的第二个问题。我的猜测是,这是由于浮标缺乏精度。当到达某一点时,乘以1.02不足以将浮点值更改为下一个更高的可表示值,因此它根本不会更改。我的测试表明,直到浮点值在10e-44
范围内,这种情况才会发生,因此您必须使用一些非常庞大的单位,这才是一个问题。一些可能的解决办法
1.0=1米
,我从未遇到过这个问题从摄影机位置减去目标位置,然后缩放它,然后再次添加目标位置
camera_position -= target_position;
camera_position /= zoom_factor;
camera_position += target_position;
关于你的第二个问题。我的猜测是,这是由于浮标缺乏精度。当到达某一点时,乘以1.02不足以将浮点值更改为下一个更高的可表示值,因此它根本不会更改。我的测试表明,直到浮点值在10e-44
范围内,这种情况才会发生,因此您必须使用一些非常庞大的单位,这才是一个问题。一些可能的解决办法
1.0=1米
,我从未遇到过这个问题谢谢,我猜就这么简单。我试着用毕达哥拉斯来计算相机和目标之间的距离,然后如果我缩小或增加了距离,那么就计算出x,y,z的新值。使用double double并没有改变缩小误差发生的距离。我已经在小范围内工作了,我在x,y,z上的值在-20到+20之间,也许在-50到+50之间。谢谢,我猜这就是这么简单的事情。我试着用毕达哥拉斯来计算相机和目标之间的距离,然后如果我缩小或增加了距离,那么就计算出x,y,z的新值。使用double double并没有改变缩小误差发生的距离。我已经在小范围内工作了,我在x,y,z上的值在-20到+20之间,也许在-50到+50之间。