【问题标题】:Deriving a ray from cursor co-ordinates using Ogre3D使用 Ogre3D 从光标坐标导出射线
【发布时间】:2012-11-06 13:31:12
【问题描述】:

我正在创建一个宇宙飞船游戏,您可以在其中从他们的飞船发射激光。基本上我想创建一条从玩家船到光标位置的射线。玩家可以四处移动,但摄像机是静止的。到目前为止,我已经尝试过使用:

Ray laser = mCamera->getCameraToViewportRay(mMouse->getMouseState().X.abs, mMouse->getMouseState().Y.abs);

和设置:

laser.setOrigin->(mPlayer->getPosition);

但是,每次我执行射线场景查询时,它都会向屏幕的左上角发射。我在这里使用代码作为如何导出屏幕坐标的参考:http://www.ogre3d.org/forums/viewtopic.php?f=5&t=49132

关于额外学分的小问题: 有没有办法只在短时间内绘制ManualObject 来模拟激光枪的射击?我已经尝试使用以下 sn-p 绘制光线的一小部分:

Ogre::ManualObject* lazor = mSceneMgr->createManualObject("lazor");
lazor->begin("HiliteYellow", Ogre::RenderOperation::OT_LINE_LIST);
// define start and end point
for (int i = 0; i< 20000;i++)
{
    lazor->position(laser.getPoint(30+i));
    lazor->position(laser.getPoint(300+i));
}
lazor->end();

mSceneMgr->getRootSceneNode()->attachObject(lazor);

谢谢!

【问题讨论】:

    标签: cursor raytracing ogre3d


    【解决方案1】:

    如果您已从源代码安装或拥有 SDK,我建议您查看 SdkTrays.h - 具体而言,screenToScene、sceneToScreen 和 getCursorRay。

    HTH

    【讨论】:

      【解决方案2】:

      视口光线的相机从您的相机位置开始,并穿过您在世界中单击的位置。

      如果所有对象的三个轴坐标之一都相同(都在同一个平原,2d),您可以使用相机来观察光线以确定光线与平原相交的点。然后你就可以从你的船上拉激光到那个点。

      您还可以使用射线来获取目标对象与光标的交点。这将适用于 2d 和 3d 表示。再次将激光从你的船上拉到那个点。

      这里详细解释了如何使用这样的射线查询:http://www.ogre3d.org/tikiwiki/tiki-index.php?page=Intermediate+Tutorial+3

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-08-17
        • 2011-10-27
        • 2014-07-24
        相关资源
        最近更新 更多