【发布时间】:2011-06-02 23:45:58
【问题描述】:
我希望放大轨道摄像机的目标。
使用如下函数操作相机:
moveCamera(x,y,z);
根据角度,x、y、z 的值应该不同以获得正确的缩放功能,但我想不出办法。
我使用getCameraposx、getTargetposy 等函数来获取目标和相机的坐标。
在 PigBens 的帮助下,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);
}
好的,所以最后一件事没有起作用,正如我在最后一条评论中所写的那样。我在想还有其他原因导致这种行为。它何时停止工作的限制只是比相机起始位置或起始位置更接近目标,对此不太确定。但是,如果我从缩小开始并且没有比摄像机的起始位置更近,它就可以工作。
我认为错误在这部分代码中,但我可能是错的,所以如果有人想查看其他部分,请询问。我所有其他相机行为都正常工作。两种模式,轨道和翻滚。俯仰、偏航和滚动适用于两种模式,而扫射适用于翻滚模式。
以下是其中两个功能的示例。
void Camera::strafeUp(float distance)
{
camerapos += upvect * distance;
targetpos += upvect * distance;
}
void Camera::tumbleYaw(float angle)
{
Quaternionf rotation((angle*PIdiv180), upvect);
rightvect = rotation.matrix() * rightvect;
forwardvect = rotation.matrix() * forwardvect;
forwardvect.normalize();
rightvect.normalize();
targetpos = camerapos + forwardvect * cameralength;
}
【问题讨论】: