Irrlicht学习笔记(8)--SpecialFX
说明:
1.载入一个房间
1.1加载模型网格
1.2可选:获得网格控制器
1.3
2.第一个特殊效果:水波
工作原理:
创建水波节点
设置水面节点的属性
3.布告板和移动光源
3.1创建一个灯光节点
3.2创建一个动画,并绑定到灯光节点
3.3绑定一个布告板,并初始化布告板的属性:材质,颜色,透明度
4.粒子系统
4.1创建粒子系统
4.2创建粒子发射器
4.3创建粒子控制器
4.4设置粒子系统
5.创建一个空间灯光节点
6.动态阴影
6.1创建动画节点
6.2增加阴影
6.3设置
代码
#include <iostream>
#include <irrlicht.h>using namespace irr;#ifdef _IRR_WINDOWS_
#pragma comment(lib, "irrlicht.lib")
//#pragma comment(linker, "/subsystem:windows /ENTRY:mainCRTStartup")
#endifint main(int argc, char** argv)
{IrrlichtDevice *device =createDevice(video::EDT_OPENGL, core::dimension2d<u32>(720, 455), 16,false, true, false, 0);if (!device)return 1;device->setWindowCaption(L"SpecialFX");video::IVideoDriver *driver = device->getVideoDriver();scene::ISceneManager *smgr = device->getSceneManager();gui::IGUIEnvironment *guiev = device->getGUIEnvironment();/*********************初始化...******************///1.加载一个房间模型//1.1加载模型网格scene::IAnimatedMesh* mesh = smgr->getMesh("../media/room.3ds");//1.2可选:获得网格控制器//旋转,缩放,颜色设置,透明度设置,反转表面,诸如此类scene::IMeshManipulator* meshman = smgr->getMeshManipulator();//在网格上创建平铺的纹理图,优化贴图效果meshman->makePlanarTextureMapping(mesh->getMesh(0), 0.004f);//1.3scene::ISceneNode* node = 0;//创建场景界定啊
#if(1)node = smgr->addAnimatedMeshSceneNode(mesh);//将网格加载到场景节点node->setMaterialTexture(0, driver->getTexture("../media/wall.jpg"));//设置节点纹理// node->setMaterialFlag(video::EMF_LIGHTING, false);//设置了光照之后需要将材质光照打开node->getMaterial(0).SpecularColor.set(0, 0, 0, 0);//
#endif//2.特效1:水波//2.1获得一个网格video::SMaterial material;material.setTexture(0, driver->getTexture("../media/wall.jpg"));mesh = smgr->addHillPlaneMesh("Hill",//名字,用于获取这个生成的网格:smgr->getMesh()core::dimension2d<f32>(20,20),//titlesize,尺寸core::dimension2d<u32>(40,40),//titlecount,制定title的数量&material,// 0,//irr::video::SMaterial0,//hillheightcore::dimension2d<f32>(10,10),//counthillscore::dimension2d<f32>(1.0,1.0)//textureRepeatCount,纹理重复次数);node = smgr->addAnimatedMeshSceneNode(mesh);
// node->setMaterialFlag(video::EMF_LIGHTING, false);node->setPosition(core::vector3df(0, -1, 0));//2.2创建水面场景节点node = smgr->addWaterSurfaceSceneNode(mesh->getMesh(0),//irr::IMesh*3.0f,//waveheight300,//wavespeed30.0f//wavelength// 0,//parent// -1,//id// core::vector3df(0, 7, 0),//position// core::vector3df(0, 0, 0),//rotation// core::vector3df(1.0f, 1.0f, 1.0f)//scale);//2.3设置水波节点//位置,材质,以及材质属性node->setPosition(core::vector3df(0, 10, 0));node->setMaterialTexture(0, driver->getTexture("../media/stones.jpg"));node->setMaterialTexture(1, driver->getTexture("../media/water.jpg"));node->setMaterialType(video::EMT_REFLECTION_2_LAYER);//node->setMaterialFlag(video::EMF_LIGHTING, false);//设置灯光后可以注释掉//3.布告板//将布告板绑定到动态移动的光源//3.1创建一个灯光节点node = smgr->addLightSceneNode(0, //parentcore::vector3df(0, 0, 0),//positionvideo::SColorf(1.0f, 0.6f, 0.7f, 1.0f),//rgba:0-1700,//radius-1//id);//3.2创建一个动画,并绑定到灯光节点scene::ISceneNodeAnimator* anim = smgr->createFlyCircleAnimator(core::vector3df(0, 150, 0),//center250,//radius0.001,//speedcore::vector3df(0,1,0),//position方向0.0,//startPosition0.0//radiusEllipsoid);node->addAnimator(anim);anim->drop();//3.3绑定一个布告板,并初始化布告板的属性:材质,颜色,透明度node = smgr->addBillboardSceneNode(node,//parent,绑定到灯光节点core::dimension2d<f32>(50,50)//size);node->setMaterialFlag(video::EMF_LIGHTING, false);//关闭布告板的光照属性node->setMaterialType(video::EMT_TRANSPARENT_ADD_COLOR);node->setMaterialTexture(0, driver->getTexture("../media/particlewhite.bmp"));//4.例子系统//4.1创建粒子系统scene::IParticleSystemSceneNode* ps =smgr->addParticleSystemSceneNode(false//是否带默认发射器);//4.2创建粒子发射器scene::IParticleEmitter* em = ps->createBoxEmitter(core::aabbox3df(-7, 0, -7, 7, 1, 7),//发射器盒子范围core::vector3df(0, 0.06, 0),//方向20,//最小发射速度100,//最大速度video::SColor(0, 255, 255, 255),//最深的颜色video::SColor(0, 255, 255, 255),//最亮的颜色200,//最短存活时间2000,//最长存活时间0,//最大角度core::dimension2df(10, 10),//最小尺寸core::dimension2df(20, 20)//最大尺寸);//绑定ps->setEmitter(em);em->drop();//4.3创建粒子控制器//此处没有用到scene::IParticleAffector* paf = ps->createFadeOutParticleAffector();ps->addAffector(paf);paf->drop();//4.4设置粒子系统ps->setPosition(core::vector3df(-70, 60, 40));ps->setScale(core::vector3df(2, 2, 2));ps->setMaterialFlag(video::EMF_LIGHTING, false);ps->setMaterialFlag(video::EMF_ZWRITE_ENABLE, false);ps->setMaterialTexture(0, driver->getTexture("../media/fire.bmp"));ps->setMaterialType(video::EMT_TRANSPARENT_VERTEX_ALPHA);//5.创建一个空间灯光节点scene::IVolumeLightSceneNode* n = smgr->addVolumeLightSceneNode(0,//parent-1,//id32,//sub u32,//sub vvideo::SColor(0, 255, 255, 255),//foot colorvideo::SColor(0, 0, 0, 0)//tail color);//设置属性if (n){n->setScale(core::vector3df(56, 56, 56));n->setPosition(core::vector3df(-120, 50, 40));//n->setMaterialFlag(video::EMF_LIGHTING, false);//创建一个动画,由7张连续图片组成core::array<video::ITexture*> textures;for (s32 g = 7; g > 0; --g){core::stringc tmp;tmp = "../media/portal";tmp += g;tmp += ".bmp";video::ITexture* t = driver->getTexture(tmp.c_str());textures.push_back(t);}//创建动画scene::ISceneNodeAnimator* glow = smgr->createTextureAnimator(textures,//150,//每帧的时间true//loop);n->addAnimator(glow);glow->drop();}//6.动态阴影//创建一个动画模型投射出阴影,//6.1创建动画节点mesh = smgr->getMesh("../media/dwarf.x");scene::IAnimatedMeshSceneNode* anode = 0;anode = smgr->addAnimatedMeshSceneNode(mesh);anode->setPosition(core::vector3df(-50, 20, -60));anode->setAnimationSpeed(15);//6.2增加阴影anode->addShadowVolumeSceneNode();smgr->setShadowColor(video::SColor(150, 0, 0, 0));//全局的//6.3设置//放大模型,随后需要重新单位化法向量anode->setScale(core::vector3df(2, 2, 2));anode->setMaterialFlag(video::EMF_NORMALIZE_NORMALS, true);/***********************初始化结束*************/
// smgr->addCameraSceneNode(0, core::vector3df(0, 30, -40), core::vector3df(0, 5, 0));scene::ICameraSceneNode* camera = smgr->addCameraSceneNodeFPS();camera->setPosition(core::vector3df(-50, 50, -150));device->getCursorControl()->setVisible(false);int lastFPS = -1;while (device->run()){driver->beginScene(true, true, video::SColor(255, 100, 101, 140));smgr->drawAll();guiev->drawAll();driver->endScene();int fps = driver->getFPS();if (lastFPS != fps){core::stringw str = L"Campfire FX example [";str += driver->getName();str += "]FPS.",str += fps;device->setWindowCaption(str.c_str());lastFPS = fps;}}device->drop();return 0;
}
Irrlicht学习笔记(8)--SpecialFX相关推荐
- Irrlicht学习笔记(5)--UserInterface
1.说明: 这个例子介绍irrlicht引擎的用户界面接口部分, 展示了Irrlicht引擎GUI设计的部分内容. 本例内容包括: 1)创建和使用窗口 2)按钮 3)滑动条 4)静态文本 5)列表盒子 ...
- PyTorch 学习笔记(六):PyTorch hook 和关于 PyTorch backward 过程的理解 call
您的位置 首页 PyTorch 学习笔记系列 PyTorch 学习笔记(六):PyTorch hook 和关于 PyTorch backward 过程的理解 发布: 2017年8月4日 7,195阅读 ...
- 容器云原生DevOps学习笔记——第三期:从零搭建CI/CD系统标准化交付流程
暑期实习期间,所在的技术中台-效能研发团队规划设计并结合公司开源协同实现符合DevOps理念的研发工具平台,实现研发过程自动化.标准化: 实习期间对DevOps的理解一直懵懵懂懂,最近观看了阿里专家带 ...
- 容器云原生DevOps学习笔记——第二期:如何快速高质量的应用容器化迁移
暑期实习期间,所在的技术中台-效能研发团队规划设计并结合公司开源协同实现符合DevOps理念的研发工具平台,实现研发过程自动化.标准化: 实习期间对DevOps的理解一直懵懵懂懂,最近观看了阿里专家带 ...
- 2020年Yann Lecun深度学习笔记(下)
2020年Yann Lecun深度学习笔记(下)
- 2020年Yann Lecun深度学习笔记(上)
2020年Yann Lecun深度学习笔记(上)
- 知识图谱学习笔记(1)
知识图谱学习笔记第一部分,包含RDF介绍,以及Jena RDF API使用 知识图谱的基石:RDF RDF(Resource Description Framework),即资源描述框架,其本质是一个 ...
- 计算机基础知识第十讲,计算机文化基础(第十讲)学习笔记
计算机文化基础(第十讲)学习笔记 采样和量化PictureElement Pixel(像素)(链接: 采样的实质就是要用多少点(这个点我们叫像素)来描述一张图像,比如,一幅420x570的图像,就表示 ...
- Go 学习推荐 —(Go by example 中文版、Go 构建 Web 应用、Go 学习笔记、Golang常见错误、Go 语言四十二章经、Go 语言高级编程)
Go by example 中文版 Go 构建 Web 应用 Go 学习笔记:无痕 Go 标准库中文文档 Golang开发新手常犯的50个错误 50 Shades of Go: Traps, Gotc ...
最新文章
- 根据ip获取用户地址-百度
- 霍尼韦尔epks 操作 组态 维护 使用 硬件 手册_标准四合一气体检测仪霍尼韦尔MiniMAX X4...
- 最近用unity5弄的一些渲染
- Elasticsearch 快速入门
- [转] 深入浅出 妙用Javascript中apply、call、bind
- Docker日志收集最佳实践
- 谷歌眼镜Mirror app开发之简单新闻浏览页面
- php安装文件怎么打开文件_我的php文件怎么打开_如何打开php文件的办法
- React中的state和props有什么区别?
- 7.数据对象映射模式
- 单片机编程:软件定时器
- 声网3D空间音频技术解析:3D空间音效+空气衰减模拟+人声模糊
- 加密系列 | SHA加密和解密算法详解代码示例
- 看过这篇文章,再也不要说你是凭实力单身了
- 方舟:生存进化官服和私服区别
- CentOS命令汇总
- 【思维题】CodeForce 817A Treasure Hunt
- java 简单万年历_Java_万年历(简单)
- 访完美世界副总裁佟庆:游戏开发如何运用人工智能技术?
- 可带癞子的通用麻将胡牌算法
热门文章
- 使用Hooks的注意事项
- layui.table 头部工具栏与行工具栏的实例
- 利用窗口函数查询出各小组内排名第一的记录(MySQL)
- 知名大学硕博论文及英文期刊全文资源集合
- 判断 一个数 是不是 质数 / 素数
- 介绍matlab的概要和功能介绍
- android 切换到阿拉伯语电话号码+号显示在右侧及顺序错乱的处理
- gram是什么意思中文翻译_-gram是什么意思_-gram的翻译_音标_读音_用法_例句_爱词霸在线词典...
- 根据MAC地址查询IP地址
- 【历史上的今天】2 月 24 日:乔布斯出生;苹果推出 Thunderbolt 接口;WhatsApp 创始人诞生