cp的小屋

not yet

  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  26 随笔 :: 0 文章 :: 201 评论 :: 1 Trackbacks

  下载了一个老外的地形编辑器,发现它的斜坡刷子(RampBrush)非常好用,于是在自己的编辑器里也实现了一个。使用RampBrush时要用鼠标在地形上拾取两个点做为刷子的两个端点,同时要设定刷子的宽度和强度,刷子的长度由拾取的两个点决定。在刷子覆盖的区域,沿刷子的长度方向通过在刷子的两个端点高度之间差值得到期望高度(一个由刷子所定义的斜面),然后根据刷子的强度和高斯分布计算出一个混合比例,按这个混合比例在地面高度和期望高度之间差值,这样刷子覆盖的区域高度就向刷子所定义的斜坡方向逼近。

  下面是这个工具可以实现的一些效果的截图,这些效果用普通的圆刷子是很难实现的而且工作量比较大。当然要实现好的效果在用完斜坡刷子之后还要通过其它编辑手段处理细节。


刷子的形状


挖沟


架桥


开路


劈山

posted on 2006-11-01 17:07 cproom 阅读(1325) 评论(24)  编辑 收藏

评论

#1楼  2006-11-02 10:32 axol [未注册用户]
不错不错:)
  回复  引用    

#2楼  2006-11-23 02:27 pk [未注册用户]
可以把那个老外的地形编辑器发给我看看吗?
  回复  引用    

说个名字也好
  回复  引用    

#4楼 [楼主] 2006-11-24 10:14 cproom      
你的联系方式?
那个编辑器名字是EarthSculptor
  回复  引用  查看    

问下博主

做地图编辑器 做最简单的 要从哪里入手。如果我不用3DS导出为3DS的格式。

地形渲染用 四叉树, 那么导出什么格式的 自定义地图格式比较首选。

自定义地图格式 有几点需要特别注意? 谢谢。
  回复  引用    

#6楼 [楼主] 2006-11-28 10:29 cproom      
做编辑器首先要熟悉一套界面编程工具,然后要对编辑器的整体框架有个设计,比如对象生命期管理怎么做,对象怎么组织,对象属性怎么统一提取、显示和更改,还有Undo/Redo机制是怎样的。
确定地图文件格式首先要确定地图是一次性加载还是随着游戏进行逐渐加载,这个是对文件格式影响最大的因素。其次是要确定数据是存在一个大的文件中还是不通类型的数据单独存一个文件。另外文件的设计最好是有一些小的头部信息,保存少量统计数据,大部分数据采用数据块ID加具体数据的方式,数据块最好不要依赖特定的排列顺序,如果数据块中涉及一些偏移量,最好把这些偏移量保存为相对于某数据块的相对偏移而不是相对于文件的绝对偏移。
  回复  引用  查看    

#7楼  2006-11-29 17:58 sailing [未注册用户]
呵呵,bump的texture似乎和我用的一样,想问一下,朋友是的bump是per/texture的吗?你的第三张图似乎只有雪才有specular,最近在思考如何在一个pass里做 per/texture 的 specular, 楼主方便的话,可以加QQ联系
  回复  引用    

#8楼  2006-12-30 15:08 sunw71 [未注册用户]
好东西!请问能否给我一份?sunw71@tom.com,非常感谢!
  回复  引用    

#9楼  2007-04-26 14:05 小红豆 [未注册用户]
你的编辑器很不错啊!能发我一份吗?谢谢!khgekhge@yahoo.com.cn
  回复  引用    

#10楼  2007-07-09 21:50 Joshua [未注册用户]
最近遇到了个类似的问题,你的这个给了很大的启发,能发份代码给我么?多谢
talentaa@hotmail.com
  回复  引用    

#11楼  2007-07-18 10:03 刘彦通 [未注册用户]
raise

  回复  引用    

#12楼  2007-07-18 10:10 刘彦通 [未注册用户]
你好
我也刚用这个地图编辑器 我的邮箱liuyantong88@126.com
不过里面的raiseBrush我想自己写.但写出来总感觉和它那个有很多差别,例如表面不圆滑之类的.而且它那个刷子刷到一定高度就会有限制住的.
我实现raiseBrush的主要算法函数如下:
case BRUSHHEIGHT_OP_UP:
{
r = brush_size;
if(brush_size > 0)
{
p = (float)(r * r + r * r);
}
else
{
p = 1.0f;
}
for(i = 0; i < size->y; i++)
{
for(j = 0; j < size->x; j++)
{
k = i * size->x + j;
x = (float)(j - r + offset->x);
y = (float)(i - r + offset->y);
q = (float)(x * x + y * y);
z = (1.0f - q / p) * T;
if(info->op_type == BRUSHHEIGHT_OP_UP)
{
w = height_buf[k] + z * info->op_scalar;
height_buf[k] = w;
}
}
}
}
break;
你知道它那个的源码吗?望指教,我邮箱 liuyantong88@126.com
  回复  引用    

#13楼  2007-07-18 10:51 cproom [未注册用户]
代码细节我就不看了,根据你说的我想有两个方面的问题:

1.斜面刷子的形状是一个类似体育场的形状,两头是两个半圆,中间是一个矩形,中间的矩形可能被拉得很长。构造时先在地面上选取两个端点,再以这两个端点的连线作为中心线按照刷子的宽度构造刷子。由于这两个端点一般不在一个高度上,所以刷子形成一个斜面,刷子下的地面就是逐渐向这个斜面靠拢,高的降低,低的拉高。这个斜面就是地面的极限位置,也就是你说的“刷到一定高度就会被限制住”

2.要根据地面顶点在水平方向上到刷子中心线的距离决定对该顶点施加影响的强度,越靠近中心线越强,越靠近边沿越弱,这样刷出来的地形就过渡比较柔和了。
  回复  引用    

#14楼  2007-07-18 13:37 刘彦通 [未注册用户]
我想请教的不是斜坡刷子,而是那个让地面突起的raiseBrush.那个刷子的形状是个圆.可以在平面地图上刷出山脉的那个.
还有你所说的强度是个什么概念,怎么样去控制它呢?
  回复  引用    

#15楼  2007-07-18 13:42 刘彦通 [未注册用户]
刷子刷出来的效果就类似与你上面第三张图中是突起
  回复  引用    

#16楼  2007-07-18 14:43 cproom [未注册用户]
圆刷子就更好办了,假设你圆刷子的半径是r,中心点的强度是k*r,k是一个系数,需调整确定。然后你找一个高斯分布的函数,把顶点到圆心的距离带入这个函数取得一个高斯分布的系数a(或者说概率),用K*r*a作为这个顶点上刷子的作用强度,每次mousemove消息都把这个顶点的高度加上刷子在这个顶点的强度。
  回复  引用    

#17楼  2007-07-19 10:21 刘彦通 [未注册用户]
谢谢 不过我对算法类似于高斯分布比较弱,楼主大哥能不能帮着写下raiseBrush刷子的代码 ,只写算法函数也可以,
小弟在这里谢谢了!!
  回复  引用    

#18楼  2007-07-30 14:31 david [未注册用户]
您好!很喜欢这样的编辑器,能不能也给我一份代码呢?(david0313@126.com)谢谢!
  回复  引用    

#19楼  2007-07-30 17:15 cproom [未注册用户]
@david
这个编辑器是我工作的一部分,代码是不能给的:)
  回复  引用    

#20楼  2007-12-13 12:45 gnudeer [未注册用户]
楼主,这个编辑器功能挺强大的,我想看看它的效果。能给我发一个编辑器吗?不要代码。只做研究。。谢谢
gnudeer@gmail.com
  回复  引用    

不错,我搞编辑器也有一段时间了,主要是基于现有的工具修改.有空请指教一下
  回复  引用    

楼主,请问你的地形中最多支持几层纹理啊?也能给我传份代码不?谢谢啊!主要是想看看你是如果处理更多层次的纹理!希望多多交流!
  回复  引用    

#23楼  2008-05-26 15:37 tonykee [未注册用户]
我也写了个场景编辑器,这些功能基本都具备了,有个小功能搞不好了,就是影子,我的影子穿不过alphatest纹理,很郁闷,用了aphatest渲染深度图还是不行

http://bbs.gameres.com/showthread.asp?threadid=111165

那个能穿alpha纹理的shadowmap fx该怎么写啊?
  回复  引用    

#24楼  2008-06-16 11:05 月隐 [未注册用户]
请问斜坡区域中的点怎么确定?
  回复  引用    


标题  
姓名  
主页
Email (只有博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
 
另存  打印
 


Locations of visitors to this page