码迷,mamicode.com
首页 > 其他好文 > 详细

ogre世界坐标鱼屏幕坐标相互转换

时间:2014-05-09 06:39:07      阅读:430      评论:0      收藏:0      [点我收藏+]

标签:int   c   get   strong   string   set   

bool worldCoordToScreen(Vector3 objPos, Camera* cam, Vector2 screenRect,  Vector2& screenPos)
{
Matrix4 viewMatrix = cam->getViewMatrix();
Matrix4 projMatrix = cam->getProjectionMatrix();
 
Vector4 in = Vector4(objPos.x, objPos.y, objPos.z, 1.0);
Vector4 out = viewMatrix * in;
out = projMatrix * out;
 
if(out.w <= 0.0) return false;    // out.w<0时,objPos 在摄像机背面
 
out.x /= out.w;
out.y /= out.w;
out.z /= out.w;
 
// Map x, y and z to range 0-1
out.x = out.x * 0.5 + 0.5;
out.y = out.y * 0.5 + 0.5;
out.z = out.z * 0.5 + 0.5;
 
// Map x,y to viewport
out.x = out.x * screenRect.x;
out.y = (1-out.y) * screenRect.y;
 
screenPos.x = out.x;
screenPos.y = out.y;
 
return true;
}

 

  virtual void mousePressed(MouseEvent* e)
    {
        // Left mouse button down
        if (e->getButtonID() & MouseEvent::khyJh"@BUTTON0_MASK)
        {
            // Setup the ray scene query
            Ray mouseRay = mCamera->getCameraToViewportRay( e->getX(), e->getY() );
            mRaySceneQuery->setRay( mouseRay );

            // Execute query
            RaySceneQueryResult &result = mRaySceneQuery->execute();
            RaySceneQueryResult::iterator itr = result.begin( );

            // Get results, create a node/entity on the position
            if ( itr != result.end() && itr-&gkhyJh"@t;worldFragment )
            {
                char name[16];
                sprintf( name, "Robot%d", mCount++ );

                Entity *ent = mSceneMgr->createEntity( name, "robot.mesh" );
                mCurrentObject = mSceneMgr->getRootSceneNode( )->createChildSceneNode( String(name) + "Node", itr->worldFragment->singleIntersection );
                mCurrentObject->attachObject( ent );
                mCurrekhyJh"@ntObject->setScale( 0.1f, 0.1f, 0.1f );
            } // if

            mLMouseDown = true;
        } // if

        // Right mouse button down
        else if (e->getButtonID() & MouseEvent::BUTTON1_MASK)
        {
            mRMouseDown = true;
            CEGUI::MouseCursor::getSingleton().hide( );
        } // else if
    } // mousePressed

ogre世界坐标鱼屏幕坐标相互转换,布布扣,bubuko.com

ogre世界坐标鱼屏幕坐标相互转换

标签:int   c   get   strong   string   set   

原文地址:http://www.cnblogs.com/kex1n/p/3717958.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!