熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> 游戲開發 >> 正文

如何在游戲中實現第一人稱視角變換

2013-11-12 23:33:07  來源: 游戲開發 

  第一人稱視角變換主要是view transformation matrix的變換其實就是不斷變動eye point和camera lookat target的坐標具備基本的三維數學和矩陣運算技巧就可以了
  
  要弄清視角移動和轉動的原理有必要先看看DX文檔的Matrices和View Transformation章節文檔的相關D數學原理和距陣計算以及接口方法搞清楚了下面的工作就相當簡單
  
  首先定義DDXVECTOR VDotVAtPointVUp;
  
  視景的移動
  
  前後移動和左右移動
  
  其實就是同時移動VDot和VAtPoint即同時移動眼睛的位置和眼睛所看到的點的位置代碼比較簡單udragon在他的主頁上有一段代碼很清楚可以參考
  
  視角的轉動
  
  原理就是繞通過VDot的矢量VUp旋轉VDot即相當於站在原地旋轉Cameraudragon在他的主頁上關於視角旋轉的代碼寫得思路比較晦澀難懂主要是他的思路比較特殊幾乎在程序裡把某點繞軸旋轉的公式按數學證明推導了一遍其實如果數學運算得當以及合理運用DD接口方法這段代碼可以簡化許多
  
  可能用到的變量
  DDXVECTOR pOut;
  DDXVECTOR pOut;
  DDXVECTOR ab;
  DDXVECTOR ac;
  DDXVECTOR Vtemp;
  DDXMATRIX RRTR;
  
  //左右移動
  DDXVecNormalize(&pOut&ac);
  `
  RT = DDXMATRIX(
  
  
  VDotx VDoty VDotz );
  
  DDXMatrixRotationAxis( &R &pOut u);
  R = RT * R;
  RT = DDXMATRIX(
  
  
  VDotx VDoty VDotz );
  R = R * RT;
  DDXVecTransform(&Vtemp &VAtPoint &R);
  VAtPointx = Vtempx;
  VAtPointy = Vtempy;
  VAtPointz = Vtempz;
  
  
  //上下移動
  s = DDXVecLength(&ab)*DDXVecLength(&VUp);
  s = (float)acos(DDXVecDot(&ab &VUp)/s);
  if(u>)
  {
  if(s<=)
  break;
  }//一度
  else
  if(s>=)
  break;
  DDXVecCross(&pOut&ab&ac);
  DDXVecNormalize(&pOut&pOut);
  
  
  RT = DDXMATRIX(
  
  
  VDotx VDoty VDotz );
  DDXMatrixRotationAxis( &R &pOut u);
  R = RT * R;
  RT = DDXMATRIX(
  
  
  VDotx VDoty VDotz );
  R = R * RT;
  DDXVecTransform(&Vtemp &VAtPoint &R);
  VAtPointx = Vtempx;
  VAtPointy = Vtempy;
  VAtPointz = Vtempz;
From:http://tw.wingwit.com/Article/program/yxkf/201311/11084.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.