在3中,我提到檢測到碰撞時候,後移乙個單位,攝像機會抖動,現在通過記錄攝像機上步移動偏移量,如果檢測到碰撞則反移回來,可以解決這個問題。
下面是修改後的**:
code
bool
framerenderingqueued(
const
frameevent
&evt)
//建立球形查詢器,第二個引數表示掩碼,預設情況下為-1
vector3 oldpos
=mcamera
->
getposition();
spherescenequery
*pquery
=mscenemgr
->
createspherequery(sphere(mcamera
->
getposition(),
10),
0x01
);scenequeryresult qresult
=pquery
->
execute();
for(std::list
<
movableobject
*>
::iterator iter
=qresult.movables.begin(); iter
!=qresult.movables.end();
++iter)
//ogre::vector3 v = mcamera->getposition();
//ogre::vector3 d = mcamera->getdirection();
//v = v + d*(-1);
//mcamera->setposition(v);
mcamera
->
moverelative(
-mtranslatevector);}}
}return
true;}
Ogre中的碰撞檢測
基於射線查詢的方式,實現攝像機和地形的碰撞檢測,防止攝像機穿透地面,這也是ogre demo中terrian例子中的方法。首先定義 rayscenequery rayscenequery 0 在createscene時候,建立場景查詢 framerenderingqueued事件中,進行射線查詢,設...
OGRE 地形碰撞檢測
我們現在要實現它,以便當我們向著地面移動時,能夠不穿過地面。因為baseframelistener已經處理了攝像機移動,所以我們就不用碰那些 了。替代地,在baseframelistener移動了攝像機後,我們要確保攝像機在地面以上10個單位處。如果它不在,我們要把它移到那兒。請跟緊這段 我們將在本...
OGRE碰撞檢測MOC
上找到它。我決定把其中最核心的一段 挑出來,詳細解讀。ray,求交射線 result,與模型麵片的交點 target,相交物體 closest distance,距離最近交點的距離 querymask,碰撞檢測掩碼 bool collisiontools raycast const ogre ray...