这几天一直在做摄影机系统,是一个关于GLScene的摄影机系统,怎么说呢,工作其实没有完成太好,我也很抱歉.但也发现在摄影机开发时多少注意的问题,如果你想让你的摄影机操作看上去那么自然的话.
   大家都知道一个摄影机系统包含Up,Right,Look(Look向量可以通过LookAt-Position获得)向量.这三个向量相互影响。那在开发时候如何来更容易更好的把思路理清楚呢?我的处理办法是先固定一个向量的处理.我的摄影机系统里UP的默认值是(0,1,0),并且我的UP向量只会是这两个值,一个是UP,另一个是-UP,在做绕Right旋转的时候检测一下Camera的实时UP向量,当实时的UP向量和Camera的UP向量的夹角大于PI/2时候,将Camera的UP向量设置为-Up向量.

检测代码如下:
 

procedure CheckUpVector;
//检测UP是否需要设置
var
  temp : TVRVector;
  //角度
  AngleUp : Single;
begin
  temp := TVRVector3.Create;
  try
    //将Right的值给temp
    temp.Assign(Right);
    //temp和Look叉乘
    temp.CrossVector(Look);
   //获得夹角
   AngleUp := ArcCos(temp.DotVector(Up));
    if AngleUp > VR_PI/2 then
      Up.Invert;//将摄影机Up向量取反
  finally
    temp.Free;
  end;
end;