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


    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

  • 相关阅读:
    CSS Hack大全-教你如何区分出IE6-IE10、FireFox、Chrome、Opera
    详解HTML5中的<aside>元素与<article>元素
    jQuery基于ajax实现星星评论代码
    JS打字效果的动态菜单代码分享
    javascript中alert()与console.log()的区别
    jquery ajax对特殊字符进行转义防止js注入使用示例
    JQuery中each()的使用方法说明
    前端图片延迟加载详细讲解
    表数据查询例题
    shell-4.bash的变量:用户自定义变量
  • 原文地址:https://www.cnblogs.com/kex1n/p/3717958.html
Copyright © 2020-2023  润新知