Ogre_初学指导_3_"场景节点控制”

本文深入探讨了游戏开发领域的关键技术,重点介绍了3D空间视频的实现过程和应用实例,通过实例代码展示了如何利用游戏引擎进行3D空间视频特效的制作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、 位置设置

setPosition() & translate().

setPosition(x,y,z) 和translate(x,y,z)函数之间的不同setPosition()函数仅是设置点,没什么可说。translate()以给定的值设置点的位置,但是它是相对于现在的位置变换。如果一个场景结点在位置(10,20,30)并我们调用setPosition(30,20,10),那个结点在就在世界空间的位置(30,20,10)。另一方面,如果我们调用translate(30,20,10),结点就会在位置(40,40,40)。这点区别虽小,但是相当重要。如果我们在正确的环境中使用这两个函数他们都是有效的,比如当我们想要设置结点在场景中的位置,我们将会使用setPosition(x,y,z)函数。然而,当我们想要移动一个已经在场景中设置好的结点,我们将会使用translate(x,y,z).

2、 旋转:

pitch(i) 绕X轴旋转

yaw(i) 绕Y轴旋转

roll(i) 绕Z轴旋转

其中Degree() [角度值],Radian()[弧度值]

3、 缩放

scale(x,y,z)[缩放]

4、 程序实现

创建节点Node1 设置其位置为(10,10,0);

创建另一节点Node2,位置(10,0,0),我 们 代 替setPosition(x,y,z) 函 数 调 用 了translate(x,y,z) 函 数 。

第三个节点Node3,我们缩放它scale(0.1,0.1,0.1)。并且有原来的rootNode节点创建改为直接由node1点创建成其childSceneNode,代码:

SceneNode *node3 = node->createChildSceneNode("Node3", Ogre::Vector3(20,0,0));

 

 

所有代码如下:

#include "ExampleApplication.h"

using namespace Ogre;

class example1 : public ExampleApplication

{

protected:

                voidcreateScene()

                {

                                //Node1

                                Entity*ent = mSceneMgr->createEntity("MyEntity","Sinbad.mesh");

                                SceneNode*node = mSceneMgr->createSceneNode("Node1");

                                node->setPosition(10,10,0);

                                mSceneMgr->getRootSceneNode()->addChild(node);

                                node->attachObject(ent);

                                //Node2

                                Entity*ent2 = mSceneMgr->createEntity("MyEntity2","Sinbad.mesh");

                                SceneNode*node2 = mSceneMgr->createSceneNode("Node2");

                                node->addChild(node2);

                                node2->translate(20,0,0);

                                //rotatethe model

                                node2->pitch(Ogre::Radian(Ogre::Math::HALF_PI));//Xrotate 90°

                                node2->attachObject(ent2);

                                //Node3

                                Entity*ent3 = mSceneMgr->createEntity("MyEntity3","Sinbad.mesh");

                                SceneNode*node3 = node->createChildSceneNode("Node3", Ogre::Vector3(20,0,0));//Ichange the code.

                                node->addChild(node3);

                                node3->yaw(Ogre::Degree(90.0f));//Y

                                node3->attachObject(ent3);

                                node3->scale(0.1,0.1,0.1);

                }

public:

                example1(){}

                ~example1(){}

};

 

int main()

{

                example1ex1;

                ex1.go();

                return0;

}

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值