您的位置:首页 > 编程语言

ogre代码实例-场景、摄像机的创建,节点的平移旋转缩放

2013-04-28 10:21 471 查看
1. 场景和摄像机

virtual void chooseSceneManager(void)

{

// Create the SceneManager, in this case a generic one

mSceneMgr = mRoot->createSceneManager(ST_GENERIC, "ExampleSMInstance");

}

virtual void createCamera(void)

{

// Create the camera

mCamera = mSceneMgr->createCamera("PlayerCam");

// Position it at 500 in Z direction

mCamera->setPosition(Vector3(0,0,500));

// Look back along -Z

mCamera->lookAt(Vector3(0,0,-300));

mCamera->setNearClipDistance(5);

mCamera->setFarClipDistance(1000);

}

摄像机默认近界面距离100,远截面 1000 000

为确保深度缓存精度的细致,缩小1000倍,5-1000

2. 创建实体和灯光

void createScene(void)

{

// Set ambient light 设置环境光

mSceneMgr->setAmbientLight(ColourValue(0.5, 0.5, 0.5));

// Create a point light 创建灯光实例

Light* l = mSceneMgr->createLight(“MainLight”);

// Accept default settings: point light, white diffuse, just set position

// NB I could attack the light to a SceneNode if I wanted it to move

// automatically with other objects, but I don’t

l->set Position(20,80,50);

Entity * ent = mSceneMgr->createEntity(“head”, “ogrehead.mesh”);

// Set material loaded from Example.material

Ent->setMaterialName(“Examples/EnvMappedRustySteel”);

// Add entity to the root scene node

mSceneMgr->gerRootSceneNode()->createChildSceneNode()->attachObject(ent);

}

3. 场景节点的移动和旋转

移动:

mSceneNode->translate(100.0, 10.0, 0.0); 默认的变换空间为父节点空间 TS_PARENT

mSceneNode->translate(100.0, 10.0, 0.0, TS_WORLD); //设置为在世界空间进行变换

mSceneNode->translate(0.0,0.0,100.0,TS_LOCAL);//对于本体空间的变换也同样如此。下面表示将一个节点沿着它朝向的方向“向前”移动

100个单位:

旋转:

默认是本体空间

// 对象绕自己的Y轴旋转一弧度,大约57角度

mSceneNode->yaw(Ogre::Radian(1.0));

// 对象绕父节点的X轴旋转一弧度,大约57角度

mSceneNode->pitch(Ogre::Radian(1.0), TS_PARENT);

// 对象绕世界的Z轴旋转一弧度,大约57角度

mSceneNode->roll(Ogre::Radian(1.0),TS_WORLD)

缩放:

// 在X轴缩放两倍,其他轴不缩放

mSceneNode->scale(2.0, 1.0, 1.0);

如果缩放场景节点时,发现模型奇怪变化,可能是因为法线也被一同缩放,因为光线计算会参照标准法线数据,而缩放后的法线会对计算阐述影响,

解决的办法是通过在缩放后调用 setNormaliseNormals()方法,不过会消耗一些执行效率
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: