修改ETM源码,增加了平滑、澡波等地形编辑算法
来源:互联网 发布:重庆南川网络花店 编辑:程序博客网 时间:2024/04/26 20:55
在etm的ETTerrainManager.cpp中增加以下函数即可,目前算法还很简单,以后可能会在丰富一些
//-----------------------------------------------------------------------------
// name: 推平
// Desc:
//-----------------------------------------------------------------------------
void TerrainImpl::deformToPlane(int x, int z, const Brush& brush, float intensity)
{
//声明推平高度
float fFinalHeight=1.0f;
//把x.z定在刷子的左上角
x -= (int)brush.getWidth()/2;
z -= (int)brush.getHeight()/2;
//确定推平高度
for (size_t i = 0; i < brush.getWidth(); ++i) //循环刷子的每个点
{
//更新x位置
int posX = x + (int)i;
//如果x位置超出边界,则不处理
if (posX < 0 || posX >= (int)mInfo.getWidth())
continue;
//如果x在地图内,则循环z的位置
for (size_t j = 0; j < brush.getHeight(); ++j)
{
//更新z位置
int posZ = z + (int)j;
//如果z位置超出边界,则不处理
if (posZ < 0 || posZ >= (int)mInfo.getHeight())
continue;
//如果x,z都在正确的范围内
float& height = mInfo.at(size_t(posX), size_t(posZ)); //获得这一坐标的高度
if (height
}
//应用推平高度
for (size_t i = 0; i < brush.getWidth(); ++i) //循环刷子的每个点
{
//更新x位置
int posX = x + (int)i;
//如果x位置超出边界,则不处理
if (posX < 0 || posX >= (int)mInfo.getWidth())
continue;
//如果x在地图内,则循环z的位置
for (size_t j = 0; j < brush.getHeight(); ++j)
{
//更新z位置
int posZ = z + (int)j;
//如果z位置超出边界,则不处理
if (posZ < 0 || posZ >= (int)mInfo.getHeight())
continue;
//如果x,z都在正确的范围内
float& height = mInfo.at(size_t(posX), size_t(posZ)); //获得这一坐标的高度
height = fFinalHeight; //设置为推平高度
//如果高度超出范围则做范围调整
if (height > 1)
height = 1;
if (height < 0)
height = 0;
}
}
//应用高度,使改动生效
updateTiles(x, z, x+(int)brush.getWidth(), z+(int)brush.getHeight());
}
//-----------------------------------------------------------------------------
// name: 噪波
// Desc:
//-----------------------------------------------------------------------------
void TerrainImpl::deformToWave(int x, int z, const Brush& brush, float intensity)
{
//把x.z定在刷子的左上角
x -= (int)brush.getWidth()/2;
z -= (int)brush.getHeight()/2;
for (size_t i = 0; i < brush.getWidth(); ++i) //循环刷子的每个点
{
//更新x位置
int posX = x + (int)i;
//如果x位置超出边界,则不处理
if (posX < 0 || posX >= (int)mInfo.getWidth())
continue;
//如果x在地图内,则循环z的位置
for (size_t j = 0; j < brush.getHeight(); ++j)
{
//更新z位置
int posZ = z + (int)j;
//如果z位置超出边界,则不处理
if (posZ < 0 || posZ >= (int)mInfo.getHeight())
continue;
//如果x,z都在正确的范围内
float& height = mInfo.at(size_t(posX), size_t(posZ)); //获得这一坐标的高度
height += GetRandomF()*intensity * brush.at(i, j); //随机增加或降低高度
//如果高度超出范围则做范围调整
if (height > 1)
height = 1;
if (height < 0)
height = 0;
}
}
//应用高度,使改动生效
updateTiles(x, z, x+(int)brush.getWidth(), z+(int)brush.getHeight());
}
//-----------------------------------------------------------------------------
// name: 平滑
// Desc:
//-----------------------------------------------------------------------------
void TerrainImpl::deformToSmooth(int x, int z, const Brush& brush, float intensity)
{
//把x.z定在刷子的左上角
x -= (int)brush.getWidth()/2;
z -= (int)brush.getHeight()/2;
for (size_t i = 0; i < brush.getWidth(); ++i) //循环刷子的每个点
{
//更新x位置
int posX = x + (int)i;
//如果x-1或+1的位置超出边界,则不处理
if ( (posX-1)<0 || (posX+1)>=(int)mInfo.getWidth() )
continue;
//如果x在平滑范围内,则循环z的位置
for (size_t j = 0; j < brush.getHeight(); ++j)
{
//更新z位置
int posZ = z + (int)j;
//如果z-1或+1的位置超出边界,则不处理
if ( (posZ-1)<0 || (posZ+1)>=(int)mInfo.getHeight() )
continue;
//如果x,z都在正确的平滑范围内
float& height = mInfo.at(size_t(posX), size_t(posZ)); //获得这一坐标的高度
float& leftHeight = mInfo.at(size_t(posX), size_t(posZ-1)); //获得左边高度
float& topHeight = mInfo.at(size_t(posX-1), size_t(posZ)); //获得上边高度
float& rightHeight = mInfo.at(size_t(posX), size_t(posZ+1)); //获得右边高度
float& bottomHeight = mInfo.at(size_t(posX+1), size_t(posZ)); //获得下边高度
height=(leftHeight+topHeight+rightHeight+bottomHeight)/4.0f; //求出四面高度的平均值
//如果高度超出范围则做范围调整
if (height > 1)
height = 1;
if (height < 0)
height = 0;
}
}
//应用高度,使改动生效
updateTiles(x, z, x+(int)brush.getWidth(), z+(int)brush.getHeight());
}
- 修改ETM源码,增加了平滑、澡波等地形编辑算法
- 修改ETM源码,增加了平滑、澡波等地形编辑算法
- 修改ETM,用Ogre实现《天龙八部》地形与部分场景详解(附源码)
- 修改ETM,用Ogre实现《天龙八部》地形与部分场景详解(附源码)
- 修改ETM,用Ogre实现《天龙八部》地形与部分场景详解(附源码)
- 修改ETM,用Ogre实现《天龙八部》地形与部分场景详解(附源码)
- 修改ETM,用Ogre实现《天龙八部》地形与部分场景详解(附源码)
- 地形平滑算法
- 地形平滑算法
- 地形平滑算法
- ETM地形编辑DEMO运行时出错问题
- 仿Crysis的道路编辑, 道路与地形匹配和地形与道路匹配,OGRE + ETM
- 《C++游戏开发》笔记十三 平滑过渡的战争迷雾(一) 原理:Warcraft3地形拼接算法
- 平滑过渡的战争迷雾(一) 原理:Warcraft3地形拼接算法
- unity3d 发布后动态修改地形高度源码
- Unity3D-Terrain地形编辑
- 转载Unity地形编辑
- jQuery编辑Select标签 增加修改删除 选
- test
- ASP.NET学习笔记(9)--SqlDataReader和SqlDataSet的比较
- uclinux-2008R1-RC8(bf561)到VDSP5的移植(60): current_text_addr
- unicode中汉字区间问题
- 正式上班咯,有些小麻烦
- 修改ETM源码,增加了平滑、澡波等地形编辑算法
- What I have lived for ? 我为什么而活——罗素自传序言
- microwindows代码分析 (五)font字体之builtin字体
- 来自Aimingoo(Aim)的 blog
- 四十年、二三事--英特尔“不惑”巨人的中国逸事
- sql server导出数据到Excel 多工作表
- 男人的深度
- NuMega在测试过程中的应用
- 关于GPS手机导航