Ogre创建地形过程和分析

OGRE根据高度图创建Terrain地形流程分析 OGRE可以通过两个接口来生成地形,分别是void TerrainSceneManager::setWorldGeometry( const String& filename )以及void TerrainSceneManager::setWorldGeometry(DataStreamPtr& stream, const String& typeName ),两者的根本区别就是一个是传递地形信息 阅读详情

Ogre 1.7中的地形教程  转自:http://blog.youkuaiyun.com/dragon2/article/details/5862925

地形创建的工作步骤:

1.创建地形全局配置

2.创建地形分组

3.创建默认的地形分块属性

4.创建地形分块


第一步

首先,在Ogre1.7中,地形是由一块一块的地形组成的,他们每快地形都有共同的属性,所以在创建地形之前我们必须指定地形块的全局配置。

代码:

  1. mTerrainGlobals = new Ogre::TerrainGlobalOptions();  
  2. mTerrainGlobals->setMaxPixelError(8);  
  3. mTerrainGlobals->setCompositeMapDistance(3000);  
  4. mTerrainGlobals->setLightMapDirection(l->getDerivedDirection());  
  5. mTerrainGlobals->setCompositeMapAmbient(mSceneMgr->getAmbientLight());  
  6. mTerrainGlobals->setCompositeMapDiffuse(l->getDiffuseColour());  
  7. mTerrainGlobals->setLightMapSize(TERRAINWORLDSIZE);  

代码说明:

首先实例化一个TerrainGlobalOptions的全局对象

然后我们看几个主要属性

mTerrainGlobals->setLightMapDirection(l->getDerivedDirection());

//设置光线的方向,所有地形块均采用同一个方向的光
mTerrainGlobals->setCompositeMapAmbient(mSceneMgr->getAmbientLight());

//设置环境光
mTerrainGlobals->setCompositeMapDiffuse(l->getDiffuseColour());

//设置漫反射光
mTerrainGlobals->setLightMapSize(TERRAINWORLDSIZE);

//设置光线图的大小,这个数字越小,地图的阴影将越粗糙

其余的几个属性可保留此默认


第二步

我们将要创建地形分组对象,该对象用于创建以及管理地形块。

代码:

  1. mTerrainGroup = new Ogre::TerrainGroup(mSceneMgr, Ogre::Terrain::ALIGN_X_Z, TERRAINWORLDSIZE, TERRAINWORLDSIZE);  
  2. mTerrainGroup->setOrigin(Ogre::Vector3((float)TERRAINWORLDSIZE / 2.0f,0,(float)TERRAINWORLDSIZE / 2.0f));  

这段代码比较简单

首先是实例化一个TerrainGroup对象

并为他指定场管理器、地形的平铺方向、地形的大小

平铺方向一般采用ALIGN_X_Z,也就是采用Y作为高度

然后第二句设置了该地形组的起始位置,在以后创建的地形块中均采用此位置作为相对位置


第三步

有了地形分组之后,我们就可以通过地形分组创建地形块了,但是每一个地形块都有很多属性,我们可以在创建地形块的同时设置那些属性,但是这样极为不方便。所以,我们可以先设置默认的地形块属性,那么创建地形块的时候就可以一个方法搞定了

代码:

  1. ////设置地形默认属性   
  2. Ogre::Terrain::ImportData& defaultimp = mTerrainGroup->getDefaultImportSettings();  
  3. defaultimp.terrainSize = TERRAINWORLDSIZE;  
  4. defaultimp.worldSize = TERRAINWORLDSIZE;  
  5. defaultimp.inputScale = 1;  
  6. defaultimp.minBatchSize = 33;  
  7. defaultimp.maxBatchSize = 65;  
  8. //设置纹理    
  9. defaultimp.layerList.resize(1);  
  10. defaultimp.layerList[0].worldSize = BLENDMAPWORLDSIZE;  
  11. defaultimp.layerList[0].textureNames.push_back("DefaultTexture.jpg");  
  12. defaultimp.layerList[0].textureNames.push_back(DEFAULTNORMALMAP);  

这些属性都比较容易理解,设置地形大小,设置每个titles大小,设置bath相关,以及设置默认的纹理。


第四步

以上三步工作做好了之后,我们就可以很方便的创建地形块了

mTerrainGroup->defineTerrain(x, y,0.0f);

加上这句代码,你将会在你的场景中看到一块地形了

defineTerrain方法首先要指定该块地形在地形分组中的索引位置,然后第三个参数必须指定高度数据,这里我设置为0.0f,那么将是出现一个平面地形。


纹理混合

地形创建好之后,接下来再来给大家讲一下纹理混合的问题

Ogre1.7的地形纹理默认支持8层纹理混合,如果想更改,可通过地形的全局配置设置,混合越多越慢。

纹理混合包括两大步骤

1.设置纹理以及法线图

2.设置纹理混合的系数


首先先获取一个Terrain对象,可通过TerrainGroup的GetTerrainAt方法获取

那么我们可以对该Terrain对象进行纹理控制

比如新增一层纹理

代码:

  1. Ogre::StringVector vTextures;  
  2. vTextures.push_back(textureName);  
  3. Ogre::String fName = textureName.substr(0,textureName.find_first_of("."));  
  4. vTextures.push_back(fName + _S("_normalheight.dds"));  
  5. terrain->addLayer(k,BLENDMAPWORLDSIZE,&vTextures);  

这段代码非常简单,知道stl估计都看得懂。vTextures的第一个元素代表纹理图本身,第二个元素代表法线图。法线可以为纹理增加凹凸不平的效果。

 

那么通过以上方式,增加了N层纹理之后,你可能发现“为什么只显示第一层纹理啊?其他新增的问题怎么不显示了?”,那是因为你还没有为他指定混合系数

一张纹理,贴在地形上,你必须指定他的纹理可见度。比如我的一个地形,我需要在左边显示A纹理,右边显示B纹理,那也就是说A纹理的左边设置为可见,B纹理的右边设置为可见。那如何做到这一点呢?

首先看一小段代码

  1. Ogre::TerrainLayerBlendMap* blendMap = terrain->getLayerBlendMap(l);  
  2. float* data = blendMap->getBlendPointer();  
  3. for (int h = 0;h<100;h++)  
  4. {  
  5.     for (int 0;w<100;w++)  
  6.     {  
  7.         data[dataIndex] = 0.0f;  
  8.     }  
  9. }  
  10. blendMap->dirty();  
  11. blendMap->update();  

看开始两句,获取了Terrain的第X层纹理,然后获取了纹理系数data,然后我们把高100宽100的位置的混合系数设置为0,即不可见,混合系数取值为0~1之间,系数越大纹理越清晰,故0就是一点都不可见。

改变纹理系数之后,再更新了一下纹理。

当这段代码执行以后,你会发现你的地形纹理上出现了一个100X100的白色正方形,明白了吧,纹理系数就是这么简单,多层纹理的时候必须为每层纹理设置系数。

 

今天的文章先简单写到这里,如果还有不明白的请QQ81786254或者Email:is-dragon@hotmail.com询问。

 
 
 

Ogre 1.7.2中的地形教程  转自:http://blog.sina.com.cn/s/blog_8380edd00100yli4.html


        ○读者可以对照着Ogre1.7.2中的terrain.h源码进行阅读加深理解,蓝色部分均为源码

○去除了一些具体场景比如添加mesh,设置setAmbientLight等与terrain无关的操作

 

第一步  创建地形全局配置 TerrainGlobalOptions

下面这段代码在setupContent()函数中,使用过Ogre1.6.5的一定对createScene()函数非常熟悉。这里setupContent()相当于createScene()函数。

首先,在Ogre1.7中,地形是由一块一块的地形组成的,他们每快地形都有共同的属性,所以在创建地形之前我们必须指定地形块的全局配置。

mTerrainGlobals = OGRE_NEW TerrainGlobalOptions();

TerrainGlobalOptions是一个类,定义了地形块的一些全局变量和默认值,需要的话我们可以改变他的变量参数,我们后面再做改变。


   第二步  创建地形分组Ogre::TerrainGroup

我们将要创建地形分组对象,该对象用于创建以及管理地形块。

代码:
  mTerrainGroup = OGRE_NEW TerrainGroup(mSceneMgr, Terrain::ALIGN_X_Z, TERRAIN_SIZE, TERRAIN_WORLD_SIZE);
  mTerrainGroup->setFilenameConvention(TERRAIN_FILE_PREFIX, TERRAIN_FILE_SUFFIX);
  mTerrainGroup->setOrigin(mTerrainPos);

这段代码比较简单

首先使用OGRE_NEW (其实也就是new)实例化一个TerrainGroup对象

参数1:为他指定场管理器、

参数2:地形的平铺方向,平铺方向一般采用ALIGN_X_Z,也就是采用Y作为高度

参数3:unit16 TERRAINSIZE=2~n+1,比如512+1=513,不符合公式的可能会导致地图显示异常,表示“The

size of each terrain down one edge in vertices (2^n+1)”楼主只能理解意思,不能完全正确

表达其中的专有名词,实际调试中,这个参数影响地图边缘的锯齿度,越小锯齿越明显,取值太小

的话,运行会错误;

参数4:Real TERRAINWORLDSIZE,地图大小,表示地图正方形的边长)

然后第二句设置了该地形组的起始位置,在以后创建的地形块中均采用此位置作为相对位置


   第三步  配置地图块参数 configureTerrainDefaults

执行configTerrainDefaults(l);

传递了一个参数light,函数定义为:
void configureTerrainDefaults(Light* l)

{
    mTerrainGlobals->setMaxPixelError(8);
    mTerrainGlobals->setCompositeMapDistance(3000);//距离镜头超过3000部分使用地图合成(CompositeMap)模式表现
    mTerrainGlobals->setLightMapDirection(l->getDerivedDirection());//地图光照方向(和实时阴影生成相关)
    mTerrainGlobals->setCompositeMapAmbient(mSceneMgr->getAmbientLight());
    mTerrainGlobals->setCompositeMapDiffuse(l->getDiffuseColour());


  Terrain::ImportData& defaultimp = mTerrainGroup->getDefaultImportSettings();
  defaultimp.terrainSize = TERRAIN_SIZE;//不太了解,调试中,这个值越小,地图边缘锯齿现象越严重,太小的话,运行起来程序会跑死、出错
  defaultimp.worldSize = TERRAIN_WORLD_SIZE;//假设为a,那么地图大小为 a x a
  defaultimp.inputScale = 600;//决定地图最大落差(高度),即位图中白色和黑色部分的高度差
  defaultimp.minBatchSize = 33;
  defaultimp.maxBatchSize = 65;


  defaultimp.layerList.resize(3);//这里设置了3层纹理,DDS为一种高级的纹理模式,DirectDrawSurface,觉得难以理解的话

//可以理解为一种特殊的.jpg图片模式,但是用DDS质材的话可以接收并显示地形阴影,用JPG就显示不出来,而且据我调试观

//察发现,第一个.dds质材是用来显示纹理图形,第二个.dds才是用来接收和显示阴影的
  defaultimp.layerList[0].worldSize = 100; //这个值关系到此贴图的细致程度,太大的话图片被拉伸得很大,看起来模糊
  defaultimp.layerList[0].textureNames.push_back("dirt_grayrocky_diffusespecular.dds");
  defaultimp.layerList[0].textureNames.push_back("dirt_grayrocky_normalheight.dds");
  defaultimp.layerList[1].worldSize = 30;
  defaultimp.layerList[1].textureNames.push_back("grass_green-01_diffusespecular.dds");
  defaultimp.layerList[1].textureNames.push_back("grass_green-01_normalheight.dds");
  defaultimp.layerList[2].worldSize = 200;
  defaultimp.layerList[2].textureNames.push_back("growth_weirdfungus-03_diffusespecular.dds");
  defaultimp.layerList[2].textureNames.push_back("growth_weirdfungus-03_normalheight.dds");

 }

 


   第四步  创建地形分块

【平坦地形】

以上三步工作做好了之后,我们就可以很方便的创建地形块了,如果想创建平坦的地形(例子中是山地地形,这里只是延伸说明,源码没有下面这4行代码)

for (long x = TERRAIN_PAGE_MIN_X; x <= TERRAIN_PAGE_MAX_X; ++x)
      for (long y = TERRAIN_PAGE_MIN_Y; y <= TERRAIN_PAGE_MAX_Y; ++y)

     mTerrainGroup->defineTerrain(x, y,0.0f);

    mTerrainGroup->loadAllTerrains(true);

你将会在你的场景中看到一块地形了,defineTerrain方法首先要指定该块地形在地形分组中的索引位置,然后第三个参数必须指定高度数据,这里我设置为0.0f,那么将是出现一个平面地形。

【用灰度图创建山地地形】

若是想读取位图来创建地形,而不是平坦的地面,需要进行如下操作

  for (long x = TERRAIN_PAGE_MIN_X; x <= TERRAIN_PAGE_MAX_X; ++x)
       for (long y = TERRAIN_PAGE_MIN_Y; y <= TERRAIN_PAGE_MAX_Y; ++y)
         defineTerrain(x, y, blankTerrain);
         mTerrainGroup->loadAllTerrains(true);

     

defineTerrain(x, y, blankTerrain)定义为:

void defineTerrain(long x, long y, bool flat = false)

{
if (flat) //表示平坦地图,高度为0
 {
   mTerrainGroup->defineTerrain(x, y, 0.0f);
 }
else
 {
   String filename = mTerrainGroup->generateFilename(x, y);

//如果有存档的,或者说以前运行过这个例子,直接加载.dat文件
   if (ResourceGroupManager::getSingleton().resourceExists(mTerrainGroup->getResourceGroup(),
filename))
   {
    mTerrainGroup->defineTerrain(x, y);
    }

//否则读取位图,创建加载地形
  else
   {
     Image img;
     getTerrainImage(x % 2 != 0, y % 2 != 0, img);//从PNG格式的灰度图图片读取灰度值,作为高度的换算基值
     mTerrainGroup->defineTerrain(x, y, &img); //调用重载函数defineTerrain创建地形
     mTerrainsImported = true; //作为下文地形纹理渲染标志,失败则表示没有创建好地形
   }

}

 

getTerrainImage()定义为:

void getTerrainImage(bool flipX, bool flipY, Image& img)
{
 img.load("terrain.png", ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME);
 if (flipX)
  img.flipAroundY(); //这些函数封装在.dll里了,没能看个究竟~
 if (flipY)
  img.flipAroundX(); //这些函数封装在.dll里了,没能看个究竟~

}


纹理混合


Ogre1.7的地形纹理默认支持8层纹理混合,如果想更改,可通过地形的全局配置设置,混合越多越慢。刚才我们定义了三层纹理。默认情况下,引擎只显示第一层纹理纹理,所以我们得为每一层指定混合系数,0表示不显示,1表示显示,0~1表示混合混合显示。混合包括两大步骤:

void Sample_bumper::initBlendMaps(Terrain* terrain)
{
  TerrainLayerBlendMap* blendMap0 = terrain->getLayerBlendMap(1); //取得第2层纹理(绿色地皮grass_green)
  TerrainLayerBlendMap* blendMap1 = terrain->getLayerBlendMap(2); //取得第3层纹理(长了植物growth_weirdfungus)
  Real minHeight0 = 70;
  Real fadeDist0 = 40;
  Real minHeight1 = 70;
  Real fadeDist1 = 15;
  float* pBlend1 = blendMap1->getBlendPointer(); //取得纹理地图起始位置
  for (Ogre::uint16 y = 0; y < terrain->getLayerBlendMapSize(); ++y)
  {
   for (Ogre::uint16 x = 0; x < terrain->getLayerBlendMapSize(); ++x)
   {
    Real tx, ty;

    blendMap0->convertImageToTerrainSpace(x, y, &tx, &ty); //将纹理坐标转换为地形坐标(类似蒙皮)
    Real height = terrain->getHeightAtTerrainPosition(tx, ty); //取得在(x,y)点坐标的高度(2D坐标系的xy)

//在不同的高度使用不同的纹理,

//当高度<70,Val=0不显示纹理1,高度>110,val=1,只显示纹理2 ,70~110之间混合显示(这里不执行)

//当高度<70,Val=0不显示纹理1,高度>85,val=1,只显示纹理3 ,70~85之间混合显示

    Real val = (height - minHeight0) / fadeDist0; 

    val = Math::Clamp(val, (Real)0, (Real)1);
    //*pBlend0++ = val;  //注释掉了,不执行

    val = (height - minHeight1) / fadeDist1;
    val = Math::Clamp(val, (Real)0, (Real)1);
    *pBlend1++ = val; //执行混合设置,0的话不显示,1只显示它,0~1混合显示,值设置完毕之后,指针++指向下一个
   }
  }
  blendMap0->dirty();
  blendMap1->dirty();
  //blendMap0->loadImage("blendmap1.png", ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME);
  blendMap0->update();
  blendMap1->update();
}

如下图:

第三层指 blend2:growth_weirdfungus-03_diffusespecular.dds

第二层没执行,混合度为0:grass_green-01_diffusespecular.dds

第一层是默认的:dirt_grayrocky_diffusespecular.dds

 

使用DDS质材,可以投射出阴影


或者也可以看我的例子:

 defaultimp.layerList.resize(3);  
 defaultimp.layerList[0].worldSize = 100; //这个值关系到贴图的细致程度,太大的话图片被拉伸得很大,看起来模糊
 defaultimp.layerList[0].textureNames.push_back("BeachStones.jpg");
 defaultimp.layerList[0].textureNames.push_back("");
 defaultimp.layerList[1].worldSize = 30;
 defaultimp.layerList[1].textureNames.push_back("grass_1025.jpg");
 defaultimp.layerList[1].textureNames.push_back("");
 defaultimp.layerList[2].worldSize = 200;
 defaultimp.layerList[2].textureNames.push_back("rock.jpg");
 defaultimp.layerList[2].textureNames.push_back("");

 

因为用的JPG质材,所以不能投射出阴影,要是真想投射阴影的话,将PHOTOSHOP装个DDS插件,读入图片,导出DDS格式的图片,添加第二行代码中为空的质材defaultimp.layerList[0].textureNames.push_back("");




这个例子应该分得很明朗了,设置成高度低于5的使用鹅卵石纹理,高于6的用板岩纹理。没有使用.dds质材

Ogre 1.7中的地形教程 地形创建的工作步骤:1.创建地形全局配置2.创建地形分组3.创建默认的地形分块属性4.创建地形分块第一步首先,在Ogre1.7中,地形是由一块一块的地形组成的,他们每快地形都有共同的属性,所以在创建地形之前我们必须指定地形块的全局配置。代码:  mTerrainGlobals = new Ogre::TerrainGlobalOptions(); mTerrainGlobals->setMaxPixelError(8); mTerrainGlobals->setCompositeM 阅读详情

相关推荐

OpenGL 地形生成与渲染

在计算机图形学中,地形生成和渲染是一个重要的应用领域。在游戏开发中,地形生成和渲染是创建真实感场景的关键。本文将介绍如何使用 OpenGL 实现一个简单的地形生成和渲染系统。接下来,我们需要将生成的高度图渲染出来。绘制地形过程中,需要使用纹理来模拟不同高度与地貌之间的关系。首先,我们需要生成一个高度图作为地形的基础。综上所述,我们可以使用上述代码实现一个简单的地形生成和渲染系统。最后,我们需要将地形渲染出来。OpenGL 地形生成与渲染。

techDM的博客 468

PLSM2

By MulinB 最近项目需要模拟一个3D场景飞机飞行的简单演示,主要功能就是提供一个比较大的地形高程图和一个飞机飞行路线,能在三维下显示演示飞机飞行。感觉以前自己见过不少类似的游戏,这无非是第一个人称射击类或者模拟飞行类的游戏的简化版,所以从避免重复制造轮子的角度决定查一下开源游戏引擎,看看有没有类似的可以很快开发出第一人称射击类游戏的引擎。经过查看了一些网上的评论和对比文章决定使用三

d04421024的专栏 854

ogre三维地图编辑器

采用ogre开发的场景编辑器,用c#做的界面。键盘的asdf和方向键可以控制照相机的走动。 交互性的实时3D地形编辑和生成工具。从简单的游戏阶段到大规模的户外环境,你都可以任意创作。owEditor并不需要你用大量的时间来完成你的3D环境。良好的用户界面让你很容易的使用owEditor,并随时可以编辑和创造出你所想要的3D模型和环境。 希望大家多提宝贵意见,版本不断升级当中。 联系作者:承接开发各种图形软件,虚拟现实软件,各种平台游戏开发。 qq:117230323 手机:13564111607 个人blog:songxiaoyu8.blog.163.com

(转)OGRE根据高度图创建Terrain地形流程分析

OGRE可以通过两个接口来生成地形,分别是void TerrainSceneManager::setWorldGeometry( const String& filename )以及void TerrainSceneManager::setWorldGeometry(DataStreamPtr& stream, const String& typeName ),两者的根本区别就是一个是传递地形信息

606

开源3d引擎ogre1.12源代码 github

开源3d引擎ogre1.12最新的源代码 ,github上下载的,方便大家学习

ogre 完整游戏 源代码

可运行的OGRE完整游戏,包括运行所需资源,源代码,工程文件,编译完成即可运行。

Ogre Mesh的渲染流程

首先一个Entity对象必须Attach到一个SceneNode。1.  创建一个SceneNode:SceneManager::getRootSceneNode() (在SceneManager::init时会创建一个RootNode)à SceneNode::createChildSceneNode()àNode::createChild()主要的操作在这个函数中完成,首先调用虚函数Scene

痞子龙3D编程 2156

Ogre源代码

OGRE(Object-Oriented Graphics Rendering Engine,即:面向对象图形渲染引擎)是一个用C++开发的面向场景、非常灵活的3D引擎,它旨在让开发人员更容易、更直接地利用硬件加速的3D图形系统开发应用。这个类库隐藏了底层系统库(如:Direct3D和OpenGL)的所有细节,提供了一个基于世界对象和其他直观类的接口。

ogre 创建地形

ogre 创建地形 先来看代码: void TutorialApplication::createScene(void) { // Create your scene here :) // 设置相机的位置,因为地形一般都比较大,所以设置得远一点 mCamera->setPosition(Ogre::Vector3(1683,50,2116)); mCamera->lookAt(

缥缈的云 专栏 634

MIPI D-PHYv2.5笔记(11) -- 高速时钟传输(High-Speed Clock Transmission)

在High-Speed模式中,Clock Lane提供了一个低摆幅(low-swing)、差分DDR时钟信号,此信号从Master到Slave,用于为高速数据传输提供时钟信号。时钟信号关于Forward Direction中的Data Lane上的位切换序列(toggling bit sequence)有正交相位,并且在一次burst的第一个被传输的bit的中心点有一个上升沿。

vivo01的专栏 3021

海上AI导航系统:技术架构与行业应用解析

计算机视觉与强化学习技术在海上导航系统中的应用正逐步改变传统航运业。通过多模态传感器融合技术,现代AI导航系统能够实现高精度的物体识别与实时路径规划,有效解决能见度依赖、决策延迟等核心痛点。以Orca AI的SeaPod系统为例,其结合了NVIDIA GeForce RTX 4070的边缘计算能力与多光谱协同识别技术,在恶劣环境下仍能保持稳定性能。这类系统不仅提升了航行安全性,还通过优化航线显著降低燃油消耗,在东京湾、马六甲海峡等繁忙水域展现出巨大价值。随着毫米波雷达融合方案的测试推进,未来海上导航将突破极

weixin_33597080的博客 354

Ogre天龙八部地形mesh部分的C++源码

Ogre的地形部分历来受人诟病,基本没什么用.听说将来的的Ogre1.7版本会重写地形.期待中...在没有合适的地形可用的情况下,自己手动生成mesh来当地形是一个不错的选择.由于很多人问我天龙八部地形方面的问题,我索性放出自己terrain类的源码.先前我的部分源码有一些问题,这次是最新版本的.其他场景的源码,等我找到工作后可陆续放出,我只是一个待就业的穷学生而已,请见谅

LuoyinanRoy的专栏 9837

Mamba实战:如何用Samba框架轻松搞定RGB-D显著性检测(附避坑指南)

本文提供了基于Samba框架进行RGB-D显著性目标检测的实战指南。详细解析了从环境配置、数据预处理到模型推理与可视化的全流程,并重点剖析了多模态数据融合中的常见陷阱与调试技巧,旨在帮助开发者高效部署这一基于Mamba的先进视觉模型,规避工程实践中的典型问题。

dapp9builder的博客 615

Ogre1.8地形和天空盒的建立过程详解(一块地形)

编译环境 WIN7 32  VS2008   Ogre的版本 1.8 Ogre的地形算法是采用Geometry MIPMap的算法,当然贴图也是采用MIPMap的算法,这里有Ogre LOD算法的论文解释:http://www.flipcode.com/articles/article_geomipmaps.pdf 看到Ogre的Terrain,突然也想自己实现一个地形的打算,不过估计要过一段

Wait的专栏 1643

基于LSTM的多变量温度预测(python从入门到入坑)

基于LSTM的多变量温度预测(python) ——我保证他能够运行,而且结果能够让你满意(如果你和我一样都是一个新手的话) 这里写目录标题基于LSTM的多变量温度预测(python)——我保证他能够运行,而且结果能够让你满意(如果你和我一样都是一个新手的话)一、我为什么要写这些?二、具体做了什么?三、源代码切块加注释,恳请批评指正(●’◡’●)ノ 一、我为什么要写这些? 因为让人抓狂的课程大作业,我小组选择了一个多变量预测方面的课题,在我这个大三基本上还没接触过Python数据处理,甚至对神经网络什么的都

代码之狐的博客 1万+

实现高精度卷积混响--MATLAB仿真篇

一、前言 之前在STM32F407上现实了直播声卡,实现的经典Schroeder混响模型和Moorer混响模型,得到不错效果。后来得知卷积混响最为真实地表现空间的特性,所以也就尝试在MCU上实现一个高精度的卷积混响(卷积点数为32768),目前MCU出来的混响效果算得上一流水准,本人也在计划在ADI的21489或者SC584上更高精度的卷积混响。 二、卷积方式 1、conv1是使用MATLAB自带卷积函数conv 2、conv2和conv3是改进后卷积过程,具有减少运算量特点,方便嵌入式移植 clear;

Six44的博客 5079

(转)OGRE根据高度图创建Terrain地形流程分析

    OGRE可以通过两个接口来生成地形,分别是void TerrainSceneManager::setWorldGeometry( const String& filename )以及void TerrainSceneManager::setWorldGeometry(DataStreamPtr& stream, const String& typeName ),两者的根本区别就是一个是传递地形信息文件名一个是传递地形信息数据流,设计两个接口的目的是可以让用户使用自己的地形信息配置文件,而不必局限于

cml1980的专栏 475

Vue - 简约大气 404 页面

效果图 实现代码 复制即可。 <template> <div> <div class="error"> <!-- 图片可保存到本地 --> <img src="https://img-blog.csdnimg.cn/20210715111039922.png"> <p>抱歉!你访问的页面不存在或已删除 :( </p> <span class="back" @click="go(

🏆 前端领域优质创作者 3371

Ogre 1.7.2中的地形教程

Ogre 1.7.2中的地形教程 ○读者可以对照着Ogre1.7.2中的terrain.h源码进行阅读加深理解,蓝色部分均为源码 ○去除了一些具体场景比如添加mesh,设置setAmbientLight等与terrain无关的操作   第一步 创建地形全局配置 TerrainGlobalOptions     下面这段代码在setupContent()函数中,使用过Ogre1.6.5

归海攸的专栏 1499

RK3588 部署 YOLO26 目标检测:从训练到 NPU 推理

如果做垂直场景(工业缺陷、农作物、特定零件),需要自己标数据。采集图像(500+ 张,覆盖不同光照/角度)→ 筛选(删除模糊/无目标)→ LabelImg 标注(选择 YOLO 格式)→ 划分(train:val:test = 7:2:1)labelImg├── train/├── val/├── test/YOLO26 在 RK3588 上的全流程是 PC 端训练 + ONNX 导出 → RKNN 转换(INT8 量化)→ 板端推理。

m0_71589036的博客 110

Qt6导航组件系列专栏:30+常见导航场景的实现

本文介绍了Qt6导航组件系列专栏,涵盖30+常见导航场景的实现方案。专栏分为7组:基础侧边栏系列、社交与协作导航系列、文件与项目导航系列、工业与车载导航系列、创意与扩展导航系列、办公与效率导航系列、流程与引导导航系列。

u011186532的专栏 1133

ogre代码学习——地形 手工和cfg创建

1. 配置文件创建地形 Terrain.cfg # The main world texture (if you wish the terrain manager to create a material for you)  WorldTexture=terrain_texture.jpg  # The detail texture (if you wish the terrain mana

xuhaiyan8825的专栏 1665

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

OGRE地形笔记

<br /><br />开发环境<br />OGRE 1.72<br /> <br />教程<br />Basic Tutorial 3         Terrain, Sky, and Fog<br /> <br /> <br />浅谈<br />在1.71之前版本中使用Terrain Scene Manager进行地形管理,之后使用Ogre Terrain System.<br />Terrain和Paging有必不可分的关系,需要都理解。<br /> <br />管理步骤<br />1、首先需要创建

深蓝的世界 1004

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

OGRE之地形跟踪

 通过分析OGRE自带的Terrain实例,可以看到在OGRE中进行地形跟踪非常简单。下面是本人分析地形跟踪过程对源码添加的注释,通过代码与注释可以清楚的看到其处理方式。 bool frameRenderingQueued(const FrameEvent& evt)    {        if( ExampleFrameListener::frameRenderingQueued(ev

Oman-3D 1910

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Ogre的分页大地形场景管理器PLSM2使用手记

By MulinB 最近项目需要模拟一个3D场景飞机飞行的简单演示,主要功能就是提供一个比较大的地形高程图和一个飞机飞行路线,能在三维下显示演示飞机飞行。感觉以前自己见过不少类似的游戏,这无非是第一个人称射击类或者模拟飞行类的游戏的简化版,所以从避免重复制造轮子的角度决定查一下开源游戏引擎,看看有没有类似的可以很快开发出第一人称射击类游戏的引擎。经过查看了一些网上的评论和对比文章决定使用三

MulinB的技术博客 6171
上一篇: c++基础---之*运算符和&运算符
下一篇: 正则表达式初学总结
HNFXS985
博客等级 码龄14年 219粉丝 150原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值