搜索
查看
编辑修改
首页
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
使用idea 把一个git分支的部分提交记录合并到另一个git分支上_idea 将一部分提交同步到其他项目
2
【OpenCV】给图像添加噪声_翻转,切割,增加噪声
3
python批量命名教程_《自拍教程69》Python 批量重命名音频文件,AV专家必备!
4
四年背的单词 笔记目录_119.23.244.79:8081/topic/frame/race/login.html
5
pip安装pandas
6
Kafka:什么是kafka? ①_kafka kafka
7
Linux如何创建文件在指定的目录?_在指定目录下创建文件
8
Unity_VRTK 3.2.1_UI手柄射线检测点击事件的问题_unity htc vrtk 射线 点击ui
9
YOLOV5源码的详细解读_yolov5代码详解
10
资深SRE带你看阿里云香港故障_sre故障复盘需要关注的问题
当前位置:
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
推荐阅读
article
Django
的
数
据库
模型
的
CharField
字段的
max
_
length
参
数
与中文
字符
数
的关系探索(参...
Django
的
数
据库
模型
的
CharField
字段的
max
_
length
参
数
与中文
字符
数
的关系探索(参
数
max
_lengt...
赞
踩
article
UE4
C++ 利用反射
获取
到
类
、
类
的
成员
_
ue
通过反射机制为指定
的
类
添加
成员
变量
或函数...
一、
获取
到特定
类
的
对象实例1.1、GetObjectsOfClassGetObjectsOfClass(
类
型::GetS...
赞
踩
article
Vue
8 大
生命周期
探秘...
Vue
2 的
生命周期
钩子函数在不同阶段提供了不同的功能,帮助我们更好地管理和优化组件的性能。在创建阶段,我们可以进行数据...
赞
踩
article
【AI
白身境
】
深度
学习
中的
数据
可视化
...
今天是新专栏《AI
白身境
》的第八篇,所谓白身,就是什么都不会,还没有进入角色。上一节我们已经讲述了如何用爬虫爬取
数据
,那...
赞
踩
article
解决
PPOCRLabel
不能正常使用的问题_pp
ocr
warning
:
when
args
.lay...
1.
PPOCRLabel
的安装2.
PPOCRLabel
的问题与解决方法1.
PPOCRLabel
的安装PPOCRLabe...
赞
踩
article
Keras
入门...
keras入门,快速上手搭建简单神经网络_keraskeras
Keras
简介
Keras
是什...
赞
踩
article
强化
学习
论文阅读(二)
SAC
算法
...
SAC
算法
是一种无模型深度
强化
学习
方法,它能够有效提高样本效率,并在现实世界的机器人任务中表现出稳健性和高效性。与传统的...
赞
踩
article
【开题报告】
基于
Python
的
绿植
采购
平台
的
设计
与
实现
开题报告_
基于
python
的
绿植
售卖
平台
设计
与...
绿植
在人们的生活中起着越来越重要的作用,不仅可以美化家居和办公环境,还有助于净化空气、调节情绪等功能。随着人们对生活品质...
赞
踩
article
angular
中
路
由
的
使用
_
angular
的
路
由
使用
...
一、
路
由
的基本
使用
1、创建两个组件ng g c components/homeng g c components/new...
赞
踩
article
更改
el
ement
button
按钮
颜色_
el
-
button
按钮
颜色...
更改
el
ement
button
按钮
颜色_
el
-
button
按钮
颜色
el
-
button
按钮
颜色 ...
赞
踩
article
前端
主题
切换
方案
(
react
+
antd
)_
antd
切换
主题
...
css variable比较灵活,但有兼容问题,相对于css标签方法,扩展性好点;为弥补css variable的不足,...
赞
踩
article
计算机
毕设
大
数据
全国疫情
数据
分析
与3D
可视化
-
python
大
数据
...
计算机
毕设
大
数据
全国疫情
数据
分析
与3D
可视化
-
python
大
数据
...
赞
踩
article
R
语言【
utlis
】——
vignette
()
,
print
()
,
edit
():
查看
、列出或获取
R
包的简...
查看
指定的软件包插图
,
或列出可用的插图;在
查看
器中显示它
,
并获取或编辑它的
R
源文件。Arguments参数【topic】...
赞
踩
article
IDA
详细使用教程
,
适合
逆向
新手
的
实验报告
...
IDA
详细使用教程
,
原创适合
逆向
新手
的
实验报告
,
关于快捷键
,
界面展示等
的
介绍
,
推荐大家结合另一篇ida实操
,
文章食用。切...
赞
踩
article
机器
学习
算法
扫盲篇_
extratreesregressor
...
1.概览:2.sklearn
算法
选择:1)结构:由图中,可以看到库的
算法
主要有四类:分类,回归,聚类,降维。(2)图片中...
赞
踩
article
【
深度
学习
系列
】——
神经网络
的
可视化
解释_
神经网络
反向传播
可视化
...
这是
深度
学习
系列
的
第三篇文章,欢迎关注原创公众号 【计算机视觉联盟】,第一时间阅读我
的
原创!回复 【西瓜书手推笔记】 还...
赞
踩
article
一个基于SpringBoot+vue的
学生
信息管理
系统
详细
设计
_
spring
boot
当框架该如何做...
主要功能:用户登录、用户管理、角色、菜单、灵活控制、sql监控、日志、老师、
学生
、班级、课程、选课、打分、成绩、新闻、通...
赞
踩
article
UE5
C++
静态
加载
资源和类...
在Actor中
加载
初始化了组件,现在在组件中赋值。使用static ConstructorHelpers::FObjec...
赞
踩
article
最全
vue
面试题+详解答案 (上)_$
parent
和
$
children
获取单签
组件
的
父
组件
和
当前
组件
...
面试题_$
parent
和
$
children
获取单签
组件
的
父
组件
和
当前
组件
的
子
组件
。$
parent
和
$
children
获取...
赞
踩
article
关于
ndk
开发使用
jni
回掉
java
方法
更新
UI
的问题_
ndk
修改ui对象...
重新整理,原理:应用程序启动时,Android首先会开启一个主线程 (也就是
UI
线程) , 主线程为管理界面中的
UI
控件...
赞
踩
相关标签
数据库
django
c++
vue.js
前端
vue生命周期
PaddlePaddle
PPOCRLabel
OCR
OCR半自动标注工具
tensorflow
keras
神经网络
论文阅读
算法
大数据
angular
angular8
javascript
css3
react.js
webpack
python
开发语言