zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    Java中如何设置表格处于不可编辑状态
    Android界面实现不成功(无报错)
    Eclipse网页报错
    【蓝桥杯】基础练习 十六进制转八进制 Java语言
    分析算法的复杂度
    Android Studio安装错误及解决办法
    Android程序报错以及解决办法
    Genymotion安装使用(配合Android Studio)
    Eclipse导入本地项目并运行
    蓝桥杯Java——安装软件Eclipse以及JDK
  • 原文地址:https://www.cnblogs.com/kex1n/p/3717958.html
Copyright © 2011-2022 走看看