使用Ogre3D从光标坐标导出光线

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用Ogre3D从光标坐标导出光线相关的知识,希望对你有一定的参考价值。

我正在创建一个太空飞船游戏,你可以从他们的船上发射激光。基本上我想从玩家发射光线到光标位置。玩家可以四处移动,但相机是静止的。到目前为止,我已尝试使用:

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来模拟激光枪的射击?我已经尝试使用以下代码段绘制一小部分光线:

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);

谢谢!

答案

如果你从源代码安装,或者有SDK,我建议你查看SdkTrays.h - 特别是screenToScenesceneToScreengetCursorRay

HTH

另一答案

视频光线的摄像机从摄像机的位置开始,然后穿过您在世界中单击的位置。

如果三个轴坐标中的一个对于所有对象(全部在同一平面上,2d)相同,则可以使用相机来观察光线以确定光线与平面相交的点。然后你可以从你的船上绘制激光到那一点。

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

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

以上是关于使用Ogre3D从光标坐标导出光线的主要内容,如果未能解决你的问题,请参考以下文章

光线投射中的方向向量

代码片段如何使用CSS来快速定义多彩光标

如何为光线投射生成相机光线

从抛物线的焦点发出的光线经反射后平行于轴的证明

《天龙八部》及Ogre3D模型的3ds max导入插件(源码公布)

Three.js 从鼠标位置投射光线