alligetor

To hell and back

 

2008年6月11日

测试

over

posted @ 2008-06-11 00:13 alligetor 阅读(162) | 评论 (0)编辑 收藏

2007年11月28日

OGRE笔记 2

刚刚写了1,马上就写2,有点骗人的嫌疑 o(∩_∩)o...
做完了1的步骤之后,我们的代码应该是

#include "ExampleApplication.h"

class TutorialApplication : public ExampleApplication
{
protected:
public:
    TutorialApplication()
    
{
    }


    
~TutorialApplication() 
    
{
    }

protected:
    
void createScene(void)
    
{
        mSceneMgr
->setAmbientLight( ColourValue( 111 ) );
        Entity 
*ent1 = mSceneMgr->createEntity( "Robot""robot.mesh" );
        SceneNode 
*node1 = mSceneMgr->getRootSceneNode()->createChildSceneNode( "RobotNode" );
        node1
->attachObject( ent1 );
    }

}
;
讲了半天结果只有createScene中的四行是刚刚加进去的。。。汗

还是这个例子,刚刚我们并没有指定要把Robot放到哪里,但是OGRE“擅作主张”的把它放在了“一个位置”,这是为什么呢?
接着看这段代码
Entity *ent2 = mSceneMgr->createEntity( "Robot2""robot.mesh" );
        SceneNode 
*node2 = mSceneMgr->getRootSceneNode()->createChildSceneNode( "RobotNode2", Vector3( 5000 ) );
        node2
->attachObject( ent2 );
这里的createChildSceneNode函数有两个参数,第二个参数明确的指定了这个节点"RobotNode2"对于根节点的相对位置,顺便提一下,这个组织场景的方法貌似叫做节点树,以后会提到。
这个node相对于根节点的位置是(50,0,0),也就是说它的位置要由根节点移动(50,0,0)的距离
如果把第二行改为直接由node1创建子节点"RobotNode2",即
SceneNode *node2 = node1->createChildSceneNode( "RobotNode2", Vector3( 5000 ) );
这时node2是相对于node1移动(50,0,0)的距离而不是根节点,这点要注意。

如果这个节点树为rootNode->node1->node2,这个时候父节点变化则子节点跟着变化,而子节点变化的时候则对父节点无影响

OK,暂且说这些,还有些函数,等第三次笔记补齐


posted @ 2007-11-28 11:19 alligetor 阅读(222) | 评论 (0)编辑 收藏

OGRE笔记 1

从头开始学,部分代码取自wiki

wiki上给的第一个Tutorial 是Beginner Tutorial 1: The SceneNode, Entity, and SceneManager constru

开始的框架什么也没有,不过给了一个TutorialApplication 类的“空壳”而已
#include "ExampleApplication.h"

class TutorialApplication : public ExampleApplication
{
protected:
public:
    TutorialApplication()
    
{
    }


    
~TutorialApplication() 
    
{
    }

protected:
    
void createScene(void)
    
{
    }

}
;

然后大概就是先设置环境光,用setAmbientLight函数,wiki上给的方法是
mSceneMgr->setAmbientLight( ColourValue( 111 ) );
注意里面ColorValue里面的元素是由0到1的。

然后就可以创建“实体(Entity)”了,wiki的方法是
Entity *ent1 = mSceneMgr->createEntity( "Robot""robot.mesh" );
注意的是我们几乎从来不在程序中直接创建一个entiry,场景中的entity的创建和管理一般是由scenemanager完成的,所以调用上面这个函数创建实体
mSceneMgr是在ExampleApplication类中已经定义好了的(以后笔记中会专门介绍这个类)。createEntity这个函数有两个参数,第一个是实体的“名字”每个实体都要有一个“独一无二”的名字,重名是不允许的。第二个参数是这个实体使用的mesh文件,在ExampleApplication中已经加载了程序的资源配置信息,这里是resources.cfg,可以自己修改这个文件。

实体创建之后就要把它和一个SceneNode,每个SceneManager都有一个RootSceneNode,我们可以把这个实体当作一个RootSceneNode的ChildSceneNode加入其中

首先创建一个子节点(ChildSceneNode)
SceneNode *node1 = mSceneMgr->getRootSceneNode()->createChildSceneNode( "RobotNode" );
这段代码用getRootSceneNode找到mSceneMgr的RootSceneNode,然后再创建它的子节点(ChildSceneNode),参数也是“名字”而且独一无二

接下来就是把刚才的实体和这个子节点结合
node1->attachObject( ent1 );

然后就可以编译并且运行了

posted @ 2007-11-28 10:53 alligetor 阅读(222) | 评论 (0)编辑 收藏

仅列出标题  

导航

统计

常用链接

留言簿(1)

随笔档案

搜索

最新评论

阅读排行榜

评论排行榜