搜索
查看
编辑修改
首页
UNITY
NODEJS
PYTHON
AI
GIT
PHP
GO
CEF3
JAVA
HTML
CSS
搜索
weixin_40725706
这个屌丝很懒,什么也没留下!
关注作者
热门标签
jquery
HTML
CSS
PHP
ASP
PYTHON
GO
AI
C
C++
C#
PHOTOSHOP
UNITY
iOS
android
vue
xml
爬虫
SEO
LINUX
WINDOWS
JAVA
MFC
CEF3
CAD
NODEJS
GIT
Pyppeteer
article
热门文章
1
C# WPF项目实战(经典)
2
基于微信小程序校园维修报修系统设计与实现(php+mysql后台)
3
淘宝商品数据爬取商品信息采集数据分析API接口详细步骤展示(含测试链接)
4
解析如何利用Python、Django框架以及Neo4j数据库,从零开始构建一个电影知识图谱问答与展示系统。
5
SQL注入篇——SqlServer的联合查询注入_sql注入 db_name()
6
【通义千问】大模型Qwen GitHub开源工程学习笔记(2)--使用Qwen进行推理的示例代码解析,及transformers的使用
7
python下载gdal的正确方法_pyhthon的gdal库下载
8
改变listview中item的背景和按下的颜色_item 颜色
9
bzoj AC倒序
10
大型企业中如何批量管理千万台服务器之ansible自动化运维工具详解 [⭐建议收藏⭐]_为啥ansible能管理那么多服务器
当前位置:
article
> 正文
Irrlicht学习笔记(11)--TerrainRender_irrlicht cskydomescenenode
作者:weixin_40725706 | 2024-02-23 02:48:03
赞
踩
irrlicht cskydomescenenode
说明:
本例程关于:
显示模式:网格,点云
材质模式:solid,detail mapped
天空盒与天空穹
源码:
#include <iostream>
#include <irrlicht.h>
#include "driverChoice.h"
using namespace irr;
#ifdef _IRR_WINDOWS_
#pragma comment(lib, "irrlicht.lib")
//#pragma comment(linker, "/subsystem:windows /ENTRY:mainCRTStartup")
#endif
/**
*1.事件处理
*"W"网格模式
*"P"点云模式
*"D"solid和detail mapped材质切换
*"S"切换天空
*/
class MyEventReceiver:public IEventReceiver
{
private:
/*
*四个成员变量,
*地形节点
*天空盒节点
*圆顶天空节点
*showBox状态标记
*/
scene::ISceneNode* Terrain;
scene::ISceneNode* Skybox;
scene::ISceneNode* Skydome;
bool showBox;
public:
//构造函数,初始使用skybox
MyEventReceiver(scene::ISceneNode* terrain, scene::ISceneNode* skybox, scene::ISceneNode* skydome
):Terrain(terrain), Skybox(skybox), Skydome(skydome), showBox(true)
{
Skybox->setVisible(true);
Skydome->setVisible(false);
}
//事件处理函数
bool OnEvent(const SEvent& event)
{
if (event.EventType == irr::EET_KEY_INPUT_EVENT&&!event.KeyInput.PressedDown)
{
switch (event.KeyInput.Key)
{
case irr::KEY_KEY_W://frame模式
Terrain->setMaterialFlag(video::EMF_WIREFRAME, !Terrain->getMaterial(0).Wireframe);
Terrain->setMaterialFlag(video::EMF_POINTCLOUD, false);
return true;
case irr::KEY_KEY_P://点云模式
Terrain->setMaterialFlag(video::EMF_POINTCLOUD, !Terrain->getMaterial(0).PointCloud);
Terrain->setMaterialFlag(video::EMF_WIREFRAME, false);
return true;
case irr::KEY_KEY_D://toggle detail map
Terrain->setMaterialType(Terrain->getMaterial(0).MaterialType == video::EMT_SOLID ?
video::EMT_DETAIL_MAP : video::EMT_SOLID);
return true;
case irr::KEY_KEY_S:
showBox = !showBox;
Skybox->setVisible(showBox);
Skydome->setVisible(!showBox);
return true;
default:
break;
}
}
return false;
}
};
int main(int argc, char** argv)
{
video::E_DRIVER_TYPE driverType = driverChoiceConsole();
IrrlichtDevice *Device =
createDevice(driverType, core::dimension2d<u32>(720, 455), 32,
false, true, false, 0);
if (!Device)
return 1;
Device->setWindowCaption(L"12TerrainRender");
video::IVideoDriver *driver = Device->getVideoDriver();
scene::ISceneManager *smgr = Device->getSceneManager();
gui::IGUIEnvironment *guiev = Device->getGUIEnvironment();
//2.准备
//logo,添加帮助,添加照相机
guiev->addImage(driver->getTexture("../media/irrlichtlogo2.png"), core::position2d<s32>(10, 10));
guiev->getSkin()->setFont(guiev->getFont("../media/fontlucida.png"));
guiev->addStaticText(
L"W:wire frame mode\nP:Point cloud\nD:toggle detailed map\nS:witch sky mode",
core::rect<s32>(10, 385, 250, 475), true, true, 0, -1, true);
scene::ICameraSceneNode* camera = smgr->addCameraSceneNodeFPS(0, 100.0f, 1.2f);
//
camera->setPosition(core::vector3df(2700 * 2, 255 * 2, 2600 * 2));//?
camera->setPosition(core::vector3df(200,4100, 2000));
camera->setTarget(core::vector3df(2497 * 2, 243 * 2, 2700 * 2));//目标
camera->setFarValue(42000.0f);
Device->getCursorControl()->setVisible(false);
/*
*2.添加地形节点
*ISceneManager::addTerrainSceneNode()
*缩放(40,4.4,40)
*terrain-texture.jpg第一层,1次
*detailmap3.jpg纹理,20次
*/
scene::ITerrainSceneNode* terrain = smgr->addTerrainSceneNode(
"../media/terrain-heightmap.bmp", 0, -1,
core::vector3df(0, 0, 0),/*position*/
core::vector3df(0, 0, 0),/*rotation*/
core::vector3df(400, 44, 400),/*scale*/
video::SColor(255, 255, 255, 255),/*vertexColor*/
5,/*maxLOD*/
scene::ETPS_17,/*patchSize*/
4/*smoothFactor*/
);
terrain->setMaterialFlag(video::EMF_LIGHTING, false);
terrain->setMaterialTexture(0, driver->getTexture("../media/terrain-texture.jpg"));
terrain->setMaterialTexture(1, driver->getTexture("../media/detailmap3.jpg"));
terrain->scaleTexture(1.0f, 20.0f);
/*
*3.添加碰撞检测
*三步:
*为地形创建三角形选择器
*为三角形选择器创建碰撞动画
*绑定到照相机
*/
scene::ITriangleSelector* selector =
smgr->createTerrainTriangleSelector(terrain, 0);
terrain->setTriangleSelector(selector);
scene::ISceneNodeAnimator* anim = smgr->createCollisionResponseAnimator(
selector, camera, core::vector3df(60, 100, 60),
core::vector3df(0, -9.8, 0),
core::vector3df(0, 50, 0));
selector->drop();
camera->addAnimator(anim);
anim->drop();
/*
*4.额外的
*获取地形数据,这里没有使用它
*/
scene::CDynamicMeshBuffer* buffer = new scene::CDynamicMeshBuffer(video::EVT_2TCOORDS,
video::EIT_16BIT);
terrain->getMeshBufferForLOD(*buffer, 0);
video::S3DVertex2TCoords* data = (video::S3DVertex2TCoords*)buffer->getVertexBuffer().getData();
//work
buffer->drop();
/*
*5.天空
*天空盒和天空穹
*/
driver->setTextureCreationFlag(video::ETCF_CREATE_MIP_MAPS, false);
scene::ISceneNode* skybox = smgr->addSkyBoxSceneNode(
driver->getTexture("../media/irrlicht2_up.jpg"),
driver->getTexture("../media/irrlicht2_dn.jpg"),
driver->getTexture("../media/irrlicht2_lf.jpg"),
driver->getTexture("../media/irrlicht2_rt.jpg"),
driver->getTexture("../media/irrlicht2_ft.jpg"),
driver->getTexture("../media/irrlicht2_bk.jpg"));
scene::ISceneNode* skydome = smgr->addSkyDomeSceneNode(
driver->getTexture("../media/skydome.jpg"),
16,/*horiRes*/
8,/*vertRes*/
0.95f,/*texturePercentange*/
2.0f/*spherePercentage*/);
driver->setTextureCreationFlag(video::ETCF_CREATE_MIP_MAPS, true);
MyEventReceiver receiver(terrain, skybox, skydome);
Device->setEventReceiver(&receiver);
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;
}
声明:
本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:
https://www.wpsshop.cn/w/weixin_40725706/article/detail/133118?site
推荐阅读
article
虚幻
5
中
Lumen
提供
哪些功能以及如何
工作
的...
虚幻
5
中
Lumen
提供
哪些功能以及如何
工作
的
虚幻
5
中
Lumen
提供
哪些功能以及如何
工作
的
虚幻
引...
赞
踩
article
【
强化
学习
】常用
算法
之一 “
SAC
”
_
sac
算法
...
强化
学习
(Reinforcement Learning,RL)是一种机器
学习
的分支,其目标是让智能体(agent)通过与...
赞
踩
article
docker
部署
教学版本...
1)
docker
部署
mysql、redis、nginx ;2)
docker
compose一键单机
部署
;3)docke...
赞
踩
article
《
Python
编程从
入门
到
实践
》学习
笔记
_
python
从
入门
到
实践
笔记
...
欢迎使用Markdown编辑器写博客《
Python
编程从
入门
到
实践
》学习
笔记
———第一天本Markdown编辑器使用St...
赞
踩
article
【SSD 代码精读】之
model
(
Backbone
)
&
loss
_
ssd
model
...
到此,我们的backbone 就构建好了,backbone 就是 resent-50 前半截,下面我们在backbone...
赞
踩
article
windows10
+
python3.8
环境下
安装
PPOCRLabel
_
ppocrlabel
安装
教程...
1.首先
安装
环境https://github.com/PaddlePaddle/PaddleOCR/blob/dygra...
赞
踩
article
初试
Vue
之
元素
、
属性
赋值
_
vue
页面
元素
赋值
...
我们在
vue
中数据
赋值
时,会很自然而然的想到用“Mustache” 双大括号插值法来
赋值
在一个小案例中,比如给一个img...
赞
踩
article
Echarts
3d
地图_
echarts
3d
地图...
使用echarts绘制
3d
地图以及在
3d
地图上绘制江苏省区域边界飞线图以及
3d
柱状图和
3d
散点._
echarts
3d
地图...
赞
踩
article
UE
阴影
全黑的
解决办法
_
ue5
阴影
太黑...
添加 Sky Light。
_
ue5
阴影
太黑
ue5
阴影
太黑 添加 Sky Light ...
赞
踩
article
vue3
+ts
获取
dom
_
vue3
ts
获取
dom
e...
通过ref绑定
dom
,使用
dom
name.value即可调用
dom
。_
vue3
ts
获取
dom
e
vue3
ts
获取
dom
...
赞
踩
article
实战
PyQt5
: 144-
QChart
图表之水平
柱状图
_
pyqt
qtchart
柱状图
点击动画...
QBarSeries创建的垂直方向绘制的
柱状图
。创建在水平方向绘制的
柱状图
则需要使用类QHorizontalBarSer...
赞
踩
article
elementui
更改
主题
颜色_
elementui
$--
color
-
primary
没有
node
-s...
1.用vue-cli安装一个新项目2.安装elementUI及
sass
-loader,
node
-
sass
// 安装el...
赞
踩
article
Eclipse
-
Formatter
...
Eclipse
-
Formatter
Eclipse
-
Formatter
...
赞
踩
article
基于
java
springboot
博客
管理
系统
设
计
和实现_
springboot
企业级
开发第十章思维训...
博客
,又译为网络日志、 部落格或部落阁等,是一种通常由个人管理、不定期张贴新的文章的网站。
博客
上的文章通常根据张贴时间,...
赞
踩
article
8
小时
Python
之机器学习/AI/
数据分析
入门笔记
_
python
ai
数据分析
...
(b站视频????在评论区;)有C和C++基础,开始学
python
的一些小Tips:
python
代码中没有打分号的习惯p...
赞
踩
article
VS2013
配置
opencv
教程
(图文详解)...
安装前先关闭杀毒软件和360卫士,注意安装路径不能有中文,安装包路径也不要有中文。1.鼠标右击【
opencv
-for_V...
赞
踩
article
强化
学习
reward
曲线
的绘制_
强化
学习
奖励
曲线
...
每隔一段取一个均值,然后把均值
曲线
绘制出来,包含全部点的
曲线
淡化处理摘自 Z. Mou, Y. Zhang, F. Ga...
赞
踩
article
【D3.
js
数据
可视化
系列教程】(二十三)
--
饼
图
圆环
图
_
d3
饼
图
圆角...
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 ...
赞
踩
article
Keras
-深度学习-
神经网络
-
手写
数字
识别模型_
手写
数字
识别
数据
预处理
...
在这个过程中,需要将每个图像转换为28x28的矩阵,并添加额外的一维来表示颜色通道。同时,由于图像
数据
的大小范围可能不同...
赞
踩
article
千万不要点进来!看完
Python
从入门
到
实践,你就要走上秃头
的
道路_
到
目前为止
,
我们
的
所有
输入
和
输出...
人与人交往用人类
的
语言,而人与
计算机
交互就需要用
到
计算机
语言
。
与人类语言相比,
计算机
语言
简单
多了,只认“二进制”
的
操作指...
赞
踩
相关标签
ue5
lumen
全局光照
算法
python
强化学习
人工智能
docker
容器
运维
编程
深度学习
windows
vue属性和元素赋值
vue中src赋值
属性v-bind赋值
echarts
3d
vue.js
javascript
前端
pyqt5
gui编程
qt
pyside2