2012-11-06 49 views
1

我正在创建一个太空船游戏,您将能够从他们的船上发射激光。基本上我想创建一个从玩家船到光标位置的射线。玩家可以四处移动,但相机是静止的。到目前为止,我已经尝试使用:使用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); 

谢谢!

回答

0

如果您已经从源代码安装,或者有SDK,我建议您查看SdkTrays.h - 具体地说,screenToScene,sceneToScreengetCursorRay

HTH

0

视口线,相机会在你的相机的位置,并通过你在你的世界点击位置去。

如果三个坐标轴中的一个坐标对于所有对象都是相同的(所有对象都在同一个平面上,2d),则可以使用相机查看射线射线以确定射线与平面相交的点。然后,您可以将激光从您的船上拖到那一点。

您也可以使用该射线来获取目标对象与光标的交点。这将与2d和3d表示一起使用。再次,您将从您的船上将激光绘制到该点。

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