博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ogre世界坐标鱼屏幕坐标相互转换
阅读量:7109 次
发布时间:2019-06-28

本文共 1719 字,大约阅读时间需要 5 分钟。

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

转载地址:http://crlhl.baihongyu.com/

你可能感兴趣的文章
统计中位值的一般概念
查看>>
gns3模式与使用csr1000v
查看>>
感想二
查看>>
Mangos魔兽世界服务端初探(1)--游戏服务端主体结构与消息分发
查看>>
SonarQube svn 认证失败的解决办法
查看>>
C++string与VC++CString互转
查看>>
Ubuntu查找占用端口进程并删除
查看>>
Rgb to Yuv,Tuv to Rgb转换(C# emgucv)
查看>>
JSTL标签+EL表达式
查看>>
PHP中的java方式重载
查看>>
CSS3:RESET、标准注释、多屏幕尺寸兼容写法。
查看>>
小得瑟一下,记一下一个SQL语句
查看>>
osx分区合并命令行操作
查看>>
Android 签名出错
查看>>
.net 获得txt内容
查看>>
顺序存储的队列实现(CPP)
查看>>
《关键字选取三步走:最后一步,一个页面多次使用+多次重新加载。
查看>>
zookeeper 常用
查看>>
ES6 new syntax features
查看>>
.NET Core 1.0会不会成为Vista?真为他捏一把汗
查看>>