• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            的筆記

            隨時隨地編輯

            相機坐標(biāo)、視景體、變換矩陣

            引子
            有這樣一個問題,動態(tài)顯示當(dāng)前實體的世界坐標(biāo)、相機坐標(biāo)、透視投影坐標(biāo),以及當(dāng)前視圖坐標(biāo)變換矩陣、透視投影矩陣。

            code:
             1/**
             2* This little snippet gets the Transformatio coordinates for a MovableObject
             3*
             4* @param   object   The object to retrieve the coordidnates of.
             5* @param   camera   The active camera
             6* @param   viewPosition   The Vector3 to store the view position in
             7* @param   ProjectionPosition   The Vector3 to store the projection position in
             8*
             9* @return   Returns true if the object is visible and the coordinates were
            10*         retrieved, false otherwise.
            11*/

            12bool getTransformationCoords(Ogre::MovableObject* object, Ogre::Camera* camera, Ogre::Vector3&viewPosition  , Ogre::Vector3&ProjectionPosition)
            13{
            14
            15    if(!object->isInScene())
            16        return false;
            17
            18    const Ogre::AxisAlignedBox &AABB = object->getWorldBoundingBox(true);
            19    /**
            20    * If you need the point above the object instead of the center point:
            21    * This snippet derives the average point between the top-most corners of the bounding box
            22    * Ogre::Vector3 point = (AABB.getCorner(AxisAlignedBox::FAR_LEFT_TOP)
            23    *    + AABB.getCorner(AxisAlignedBox::FAR_RIGHT_TOP)
            24    *    + AABB.getCorner(AxisAlignedBox::NEAR_LEFT_TOP)
            25    *    + AABB.getCorner(AxisAlignedBox::NEAR_RIGHT_TOP)) / 4;
            26    */

            27
            28
            29    // Get the center point of the object's bounding box
            30    const Ogre::Vector3& point = AABB.getCenter();
            31
            32    // Is the camera facing that point? If not, return false
            33    Ogre::Plane cameraPlane = Plane(Vector3(camera->getDerivedOrientation().zAxis()), camera->getDerivedPosition());
            34
            35    if(cameraPlane.getSide(point) != Plane::NEGATIVE_SIDE)
            36        return false;
            37
            38    // Transform the 3D point into screen space
            39    //point = camera->getProjectionMatrix() * (camera->getViewMatrix() * point);
            40    viewPosition = camera->getViewMatrix() * point;
            41    ProjectionPosition = camera->getProjectionMatrix() * viewPosition;
            42
            43
            44    // Transform from coordinate space [-1, 1] to [0, 1] and update in-value
            45    ProjectionPosition.x = (ProjectionPosition.x / 2+ 0.5f;
            46    ProjectionPosition.y = 1 - ((ProjectionPosition.y / 2+ 0.5f);
            47
            48    return true;
            49}

            示意圖:


            分析:
            1. view坐標(biāo)顯示的是鼠標(biāo)所在實體的中心點在相機坐標(biāo)系中的坐標(biāo)。看代碼的line40,視圖矩陣乘以點的世界坐標(biāo),得到了這個點的在相機坐標(biāo)系中的坐標(biāo)。

            2. projection坐標(biāo)(0.2,0.2,1.0)表示的是屏幕坐標(biāo)系的坐標(biāo)。代碼的line41,透視投影矩陣乘以點的相機坐標(biāo),得到了這個點的透視變換坐標(biāo)。這個坐標(biāo)的范圍是[-1,1],需要變換到[0,1],代碼line45、46完成了這項映射變換。

            3.矩陣窗口顯示的是當(dāng)前視圖變換矩陣和投影變換矩陣。動態(tài)運行后可以發(fā)現(xiàn)投影矩陣一直不變。視圖矩陣隨著相機的移動、選擇在動態(tài)變換。
            視圖矩陣變換規(guī)律:
            相機沿著front方向變化:row3的z項變化,其他項均不變。
            相機沿著left方向變化,row0的z項目變化,其他項均不變。
            相機沿著top方向變化,row2的z項變化,其他項均不變。
            相機yaw?pitch?roll?
            任何時候row3都不變:{0 ,0 , 0 , 1}

            posted on 2011-06-20 21:51 的筆記 閱讀(1368) 評論(0)  編輯 收藏 引用


            只有注冊用戶登錄后才能發(fā)表評論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


            国产成人综合久久综合 | 国产精品99久久久精品无码 | 亚洲综合精品香蕉久久网97| 日本久久久精品中文字幕| 狠狠人妻久久久久久综合蜜桃| 久久久久se色偷偷亚洲精品av| 久久精品www| 日日噜噜夜夜狠狠久久丁香五月| 狠狠色丁香久久综合五月| 久久精品青青草原伊人| 99久久国产综合精品五月天喷水| 亚洲欧洲日产国码无码久久99| 久久综合久久综合久久| 伊人久久大香线蕉av不卡| 91久久精品国产成人久久| 久久久免费精品re6| 久久久久亚洲AV片无码下载蜜桃| 国产成人精品久久一区二区三区av| 精品人妻伦九区久久AAA片69| 久久99精品免费一区二区| 一本大道加勒比久久综合| 久久99精品国产麻豆| 久久久一本精品99久久精品88| 蜜臀久久99精品久久久久久| 99久久夜色精品国产网站| 精品一区二区久久久久久久网站| 久久人人爽人人爽人人片av高请| 精品综合久久久久久97| 久久伊人精品一区二区三区| 欧美久久一区二区三区| 久久亚洲精品无码播放| 亚洲日本va午夜中文字幕久久| 久久亚洲精品无码播放| 久久综合伊人77777麻豆| 99久久做夜夜爱天天做精品| 伊人久久大香线蕉AV一区二区| 久久亚洲国产精品成人AV秋霞| 国产69精品久久久久久人妻精品| 伊人色综合久久天天人手人婷| 国产综合久久久久久鬼色| 精品精品国产自在久久高清|