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

  • 相关阅读:
    VMware报错:无法连接 MKS: 套接字连接尝试次数太多;正在放弃
    java进阶学习计划
    js实现动态建立表格-------Day59
    Java通过POI技术操作Excel(3)----数据导出
    java通过POI技术操作Excel(2)----模板读取,录入数据
    Form表达元素美化篇----好看的搜索框(1)
    java通过POI技术操作Excel(1)----模板导出
    hibernate中 org.hibernate.MappingException: invalid configuration 报错
    中高级PHP程序员应该掌握哪些技术?
    Win10下Chrome浏览器无法安装 Adobe Flash Player 如何解决
  • 原文地址:https://www.cnblogs.com/kex1n/p/3717958.html
Copyright © 2011-2022 走看看