游戏开发论坛

 找回密码
 立即注册
搜索
查看: 4634|回复: 9

ogrenewt的碰撞问题

[复制链接]

18

主题

34

帖子

34

积分

注册会员

Rank: 2

积分
34
QQ
发表于 2008-6-12 17:34:00 | 显示全部楼层 |阅读模式
ogrenewt的碰撞问题
我在ogrenewt的Demo01_TheBasics例子OgreNewtonApplication.cpp里加载了1个房子的模型
         Entity *floor;  SceneNode *floornode;
        floor=mSceneMgr->createEntity("Floor", "Rectangle17x.mesh");
        floornode = mSceneMgr->getRootSceneNode()->createChildSceneNode( "FloorNode" );
        floornode->attachObject( floor );
        floornode->setScale(6,3,4);
        floor->setCastShadows( false );
        OgreNewt::Collision* col = new OgreNewt::CollisionPrimitives::TreeCollision(m_World, floornode, true);
        OgreNewt::Body* bod = new OgreNewt::Body( m_World, col );
        delete col;
        bod->attachToNode( floornode );
        bod->setPositionOrientation( Ogre::Vector3(0.0,-10.0,0.0), Ogre:uaternion::IDENTITY );
        随后也增加了1个人物的模型
          Entity *ent1 = mSceneMgr->createEntity("Ninja", "ZOMBIE.mesh");
        SceneNode *node1 = mSceneMgr->getRootSceneNode()->createChildSceneNode("NinjaNode");
         node1->attachObject(ent1);
        OgreNewt::Collision* nol=new OgreNewt::CollisionPrimitives::Box(m_World,Vector3(8,8,8));
        OgreNewt::Body* nod=new OgreNewt::Body(m_World,nol);
         delete nol;
        Ogre::Vector3 inertia = OgreNewt::MomentOfInertia::CalcBoxSolid( 160.0,Vector3(8,8,8));
        nod->setMassMatrix( 160.0, inertia );
        nod->setStandardForceCallback();
        ent1->setNormaliseNormals(true);
        nod->attachToNode(node1);
        nod->setPositionOrientation( Ogre::Vector3(0.0,-10.0,0.0), Ogre:uaternion::IDENTITY );
        随后用键盘控制人物在房子里行走,为什么没有跟房子发生碰撞,而是直接穿过去了.请教下还缺少那几步,请指教下!!谢谢了!!!!!

5

主题

12

帖子

12

积分

新手上路

Rank: 1

积分
12
发表于 2008-6-12 21:44:00 | 显示全部楼层

Re: ogrenewt的碰撞问题

你是不是通过Node->setPosition()来移动人物的? 这样应该是要穿墙的吧。

18

主题

34

帖子

34

积分

注册会员

Rank: 2

积分
34
QQ
 楼主| 发表于 2008-6-12 22:30:00 | 显示全部楼层

Re:ogrenewt的碰撞问题

我虽然设置的是移动的节点,但是通过获得键盘的输入用WSAD来控制节点的方向移动,这跟碰撞有问题吗??

5

主题

12

帖子

12

积分

新手上路

Rank: 1

积分
12
发表于 2008-6-12 22:47:00 | 显示全部楼层

Re:ogrenewt的碰撞问题

我觉的你应该通过设置速度来实现碰撞,比如W,就是用一个方向,加上一个速度值。这样就是会有碰撞的。我看了一些OGRENEWT的例子。里面实现碰撞的都是通过设置速度。

5

主题

12

帖子

12

积分

新手上路

Rank: 1

积分
12
发表于 2008-6-12 22:52:00 | 显示全部楼层

Re:ogrenewt的碰撞问题

具体的实现你可以看NEWOEN的SDK里面的例子七tutorial_07_CharaterController。这个就是一个你想要的效果例子

63

主题

181

帖子

181

积分

注册会员

Rank: 2

积分
181
发表于 2008-6-12 23:47:00 | 显示全部楼层

Re: Re:ogrenewt的碰撞问题

chen375877324: Regrenewt的碰撞问题

我虽然设置的是移动的节点,但是通过获得键盘的输入用WSAD来控制节点的方向移动,这跟碰撞有问题吗??



对地,不可以控制node。必须控制body。简单的可以用setVelocity设置一个node方向上的速度。而且你要在房间里碰撞吗?我想那应该是BSP,应该不行吧?没试过。

0

主题

5

帖子

5

积分

新手上路

Rank: 1

积分
5
发表于 2008-6-12 23:48:00 | 显示全部楼层

Re:ogrenewt的碰撞问题

Newton 是一个物理引擎, 你既然要让他帮你运算物理状态, 又怎么能自己再去手动设置他所绑定的节点的坐标呢?
这样的话, 他不就是没有办法帮你计算了, 你移动节点是看帧FPS的, 物理中是看速度和惯性的。。。 不能这样混在一起

63

主题

181

帖子

181

积分

注册会员

Rank: 2

积分
181
发表于 2008-6-12 23:51:00 | 显示全部楼层

Re:ogrenewt的碰撞问题

补充下,也不一定一定控制node,但如果body不动的话就会被freeze,也就是说Newt World不在对这个物体做任何判断。这个处理起来比较麻烦。所以还是设置速度吧。

63

主题

181

帖子

181

积分

注册会员

Rank: 2

积分
181
发表于 2008-6-12 23:58:00 | 显示全部楼层

Re: Re:ogrenewt的碰撞问题

wangli-rei: Regrenewt的碰撞问题

Newton 是一个物理引擎, 你既然要让他帮你运算物理状态, 又怎么能自己再去手动设置他所绑定的节点的坐标呢...



呵呵,也未必。物理引擎的任务是计算body的位置和方向。但是自己设定也可以,只用物理引擎检测碰撞也是没问题的。只要你的body和entity的位置一样就好,可以用OgreNewt debug的showline()看下。

18

主题

34

帖子

34

积分

注册会员

Rank: 2

积分
34
QQ
 楼主| 发表于 2008-6-13 08:38:00 | 显示全部楼层

Re:ogrenewt的碰撞问题

   哦,我明白了!谢谢大家的指教!!!还有我的房子看起是室内场景,其实本身是个室外场景,从资源里读取加载的,碰撞应该没问题吧!不需要.BSP文件吧!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-22 06:27

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表