用户工具

站点工具


编程:cpp:irrlicht:激光特效

差别

这里会显示出您选择的修订版和当前版本之间的差别。

到此差别页面的链接

后一修订版
前一修订版
编程:cpp:irrlicht:激光特效 [2019/08/02 13:50]
127.0.0.1 外部编辑
编程:cpp:irrlicht:激光特效 [2019/08/05 00:29] (当前版本)
cgoxopx irrlicht:激光特效 更名为 编程:cpp:irrlicht:激光特效
行 1: 行 1:
 ====== 3d游戏中的激光效果 ====== ====== 3d游戏中的激光效果 ======
 +激光的本质是两张相互垂直的图片。创建过程如下(以irrlicht为例)\\
  
 +    void addLaser(//​创建激光
 +        irr::​scene::​ISceneManager * scene,
 +        const irr::​core::​vector3df & from,
 +        const irr::​core::​vector3df & dir//​激光方向及长度
 +    ){
 +        auto node = scene->​addEmptySceneNode();//​创建主节点
 +        ​
 +        auto length=dir.getLength();​
 +        irr::​core::​vector3df center(0,​0,​length/​2);//​中心点。
 +        //​因为创建的正方形原点位于中心,要将其拉伸至length,中心点自然就是length/​2
 +        ​
 +        auto geo  = scene->​getGeometryCreator();//​几何体绘制工具
 +        ​
 +        auto mesh = geo->​createPlaneMesh(irr::​core::​dimension2d<​f32>​(1,​1));//​创建一个正方形
 +        ​
 +        //​创建一个水平的和一个垂直的矩形,贴上相同的纹理
 +        auto n1 = scene->​addMeshSceneNode(
 +            mesh,​node,​-1,​
 +            center,
 +            irr::​core::​vector3df(0,​0,​0),//​水平方向
 +            irr::​core::​vector3df(1,​1,​length)//​向z轴拉伸length倍
 +        );
 +        n1->​setMaterialFlag(irr::​video::​EMF_LIGHTING,​ false );//​不受光照
 +        n1->​setMaterialTexture( 0 , this->​texture);//​纹理
 +        n1->​setMaterialType(irr::​video::​EMT_TRANSPARENT_ALPHA_CHANNEL);//​开启透明
 +        ​
 +        auto n2 = scene->​addMeshSceneNode(
 +            mesh,​node,​-1,​
 +            center,
 +            irr::​core::​vector3df(0,​0,​90),//​旋转90度(irr和其他引擎不一样,irr使用角度来控制旋转)
 +            irr::​core::​vector3df(1,​1,​length)
 +        );
 +        n2->​setMaterialFlag(irr::​video::​EMF_LIGHTING,​ false );//​不受光照
 +        n2->​setMaterialTexture( 0 , this->​texture);//​纹理
 +        n2->​setMaterialType(irr::​video::​EMT_TRANSPARENT_ALPHA_CHANNEL);//​开启透明
 +        ​
 +        mesh->​drop();//​mesh不再使用了
 +        ​
 +        //​设置节点属性
 +        node->​setPosition(from);//​位置
 +        node->​setRotation(dir.getHorizontalAngle());//​旋转
 +        ​
 +    }
编程/cpp/irrlicht/激光特效.1564725049.txt.gz · 最后更改: 2019/08/02 13:50 由 127.0.0.1