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

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()方法,不过会消耗一些执行效率










©️2020 CSDN 皮肤主题: 大白 设计师: CSDN官方博客 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值