Я хочу увеличить цель орбитальной камеры.
Камера управляется с помощью такой функции:
moveCamera(x,y,z);
В зависимости от угла значения x, y,z должен отличаться, чтобы получить правильную функцию масштабирования, но я не могу найти способ сделать это.
Я использую такие функции, как getCameraposx
, getTargetposy
и т. д., чтобы получить координаты для моей цели и камеры..
Zoom вроде работает теперь после помощи PigBens, но я столкнулся с проблемой.Увеличение не является проблемой, но после слишком близкого увеличения масштабирование перестает работать.И со слишком близким я все еще довольно далеко.
Вот моя функция масштабирования.
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;
}