====== 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(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());//旋转 }