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()方法,不过会消耗一些执行效率
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()方法,不过会消耗一些执行效率
相关文章推荐
- ogre3D程序实例解析1-平移旋转与缩放
- ios开发--旋转、移动、缩放手势实例代码
- OpenGL绘制简单场景,实现旋转缩放平移和灯光效果
- OGRE创建场景、摄像机、视口的基本流程
- 创建图片内存副本和旋转,缩放,平移,镜面,倒影
- OpenGL绘制简单场景,实现旋转缩放平移和灯光效果
- 通过代码创建UILable,并设置平移旋转字体颜色等属性
- osg矩阵变换节点-----平移旋转缩放
- ios开发--旋转、移动、缩放手势实例代码
- 计算机图形学之二维平移旋转缩放代码
- shader学习基础之十一实现纹理的缩放平移和旋转,以及用c#代码合并两种贴图并且控制位置
- ios开发--旋转、移动、缩放手势实例代码
- osg矩阵变换节点-----平移旋转缩放
- 动画效果之渐变、缩放、平移、旋转<代码实现>
- Ogre场景、节点、摄像机通过自动、鼠标、键盘控制移动
- ios开发--旋转、移动、缩放手势实例代码
- Unity3D开发之控制摄像机围绕物体旋转 平移 缩放
- unity3d实现相机对场景物体的旋转、缩放、平移查看功能、近似于scene下查看场景的效果
- U3D中摄像机绕屏幕中心点旋转缩放平移
- Ogre 旋转节点后,创建该节点的节点动画,则节点旋转效果失效