Irrlicht 中如何自定义场景节点和网格数据

自定义场景节点需要继承ISceneNode注意ISceneNode有几个函数必须覆盖

自定义网格数据需要继承 IMeshNode,IMeshNode继承与ISceneNode

 

class CSampleSceneNode : public scene::ISceneNode

{

core::aabbox3d<f32> Box;

    //顶点数据

video::S3DVertex Vertices[4];

    //材质

video::SMaterial Material;

 

public:

 

CSampleSceneNode(scene::ISceneNode* parent, scene::ISceneManager* mgr, s32 id)

: scene::ISceneNode(parent, mgr, id)

{

         //设置节点的材质 ,一般情况下需要将lighting 设置为false (表示不需要光照)

Material.Wireframe = false;

Material.Lighting = false;

//节点的四个顶点数据

Vertices[0] = video::S3DVertex(0,0,10, 1,1,0,

video::SColor(255,0,255,255), 0, 1);

Vertices[1] = video::S3DVertex(10,0,-10, 1,0,0,

video::SColor(255,255,0,255), 1, 1);

Vertices[2] = video::S3DVertex(0,20,0, 0,1,1,

video::SColor(255,255,255,0), 1, 0);

Vertices[3] = video::S3DVertex(-10,0,-10, 0,0,1,

video::SColor(255,0,255,0), 0, 0);

 

Box.reset(Vertices[0].Pos);

for (s32 i=1; i<4; ++i)

Box.addInternalPoint(Vertices[i].Pos);

}

 

 

virtual void OnRegisterSceneNode()

{

if (IsVisible)

SceneManager->registerNodeForRendering(this);

 

ISceneNode::OnRegisterSceneNode();

}

 

 

virtual void render()

{

 

u16 indices[] = { 0,2,3, 2,1,3, 1,0,3, 2,0,1 };

video::IVideoDriver* driver = SceneManager->getVideoDriver();

 

driver->setMaterial(Material);

driver->setTransform(video::ETS_WORLD, AbsoluteTransformation);

//通过4个顶点画出立体三角形

driver->drawVertexPrimitiveList(&Vertices[0], 4, &indices[0], 4, video::EVT_STANDARD, scene::EPT_TRIANGLES, video::EIT_16BIT);

}

 

 

virtual const core::aabbox3d<f32>& getBoundingBox() const

{

return Box;

}

 

virtual u32 getMaterialCount() const

{

return 1;

}

 

virtual video::SMaterial& getMaterial(u32 i)

{

return Material;

}

};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值