推荐日志

LOD Terrain Demo

[ 2005-11-19 17:24:16 | 作者: Admin ]
字体大小: | |
演示截图:
uploads/200511/19_175504_lod1.jpg

剔除了97.43%的顶点

uploads/200511/19_175608_lod2.jpg

剔除了97.24%的顶点

LOD (Level Of Detail) 层次细节, 是解决硬件性能不够发达的技术产物, 可以说它是用种过渡技术, 也就是说当硬件发展的一定阶段, LOD技术也许就会走向末端. 但现阶段,LOD还是解决渲染速度瓶颈问题的最有效的技术手段之一.

在我的DEMO中, 我使用了perlin noise来程序生成高度信息, 整个生成的高度图的大小为1025X1025, 按DEMO中的比例尺来换算,大约是4X4 平方公里的面积. 顶点总数大约为105万.

可以想象,如果不进行任何形式的优化, 完全 brute-force (全部一次渲染), 如此多的数据量通过你的BUS传送到GPU里面, 那个性能可像而知 (如果你的电脑跟PS3一样强悍, 那也无所谓). 大多数的电脑都是不能承受的.

在我的DEMO中, 使用了 LOD 算法 + Frustum Culling 算法, 有效的进行了数据的剔除, 一般平均可以剔除97%的顶点, 并保持较高的FPS (>50)
  • LOD算法 - 离摄像机近的地方,用高的细节网格渲染, 较远的地方用低的细节网格渲染.
  • Frustum Culling算法 - 对视锥以外不可见的顶点, 在渲染前剔除, 不传送到GPU
在我的DEMO中,还加入了镜头光晕效果, 模拟镜头在强光下发生散射的效果.
由于需要与生成数据, 对内存的要求比较苛刻, 最好是256MB或256MB以上.

下载地址:
点击下载

www.azure.com.cn
[最后修改由 Admin, 于 2005-11-19 18:00:26]
评论Feed 评论Feed: http://www.azure.com.cn/feed.asp?q=comment&id=156

浏览模式: 显示全部 | 评论: 38 | 引用: 0 | 排序 | 浏览: 12918
zj572*
[ 2005-11-21 14:48:28 ]
能不能贴出如何模拟镜头光晕效果
Admin
[ 2005-11-21 16:33:26 ]
首先 用 gluProject()把太阳的三维坐标转换成 屏幕坐标2D
在平行投影中,将刚才的2D坐标处, 画上太阳的最强光斑, 其他所有的光斑都在屏幕中心与, 最强光斑的一条直线上。
门山过客
[ 2005-11-22 10:07:14 ]
效果真的很好,但是怎么没源代码?
yuyeyue3841
[ 2005-12-08 21:34:33 ]
//将空间坐标转化为屏幕坐标
void Convert(GLfloat Objx, GLfloat Objy, GLfloat Objz)
{
GLint viewport[4];
GLdouble mvmatrix[16],projmatrix[16];  
glGetIntegerv(GL_VIEWPORT,viewport);
glGetDoublev(GL_MODELVIEW_MATRIX,mvmatrix);
glGetDoublev(GL_PROJECTION_MATRIX,projmatrix);
if( gluProject((GLdouble)Objx,(GLdouble)Objy,(GLdouble)Objz,
mvmatrix,projmatrix,viewport,&winx,&winy,&winz) == GL_FALSE)
{
MessageBox(NULL, "Convert Fail", "", MB_OK);
}
}
上面是我写的一个把空间坐标转化为屏幕坐标的程序,能帮我看看哪有错吗?
yuyeyue3841
[ 2005-12-08 22:08:22 ]
我用上面的函数获得的 屏幕坐标值是负的, 而屏幕坐标值不可能是负的啊!

请高手帮忙,谢谢!
Admin
[ 2005-12-09 10:42:17 ]
我没有考虑winz
我直接让他为0,
就看到了图像
yuyeyue3841
[ 2005-12-09 16:55:07 ]
那是在gluUnProject中可以设置winz为0吧,在gluProject中是获得的,怎么能设置呢?
我按照这个上面的信箱给你发了封信,不知可收到了?
我的信箱是yuyeyue3841@sina.com。
黑木凯*
[ 2005-12-26 09:56:28 ]
关于镜头光晕的效果我有个问题:
光晕有个难题是:当有遮挡物挡住中心的太阳时,太阳和光晕都消失.
当遮挡物没挡住中心的太阳时,光晕始终存在.
也就是说:不可能挡住部分光晕.光晕和太阳同时存在或消失.
请问这个如何实现?
Admin
[ 2005-12-26 10:39:07 ]
光晕是强光照在镜头上,发生的现象, 是出现在镜头上的,所以不可能部分出现。
黑木凯*
[ 2005-12-26 13:15:34 ]
可能是我说得有问题,我的意思就是想问如何不挡住部分光晕.
比如当一座山丘挡住太阳,那么此时所有的光晕都应该消失,这个该怎么实现?
总不至于自己每帧去计算太阳和山丘的遮挡关系吧?
Admin
[ 2005-12-26 16:45:34 ]
读出当前像素的Z-BUFFER 值, 和 太阳的Z-BUFFER做比较。
就可以确定遮挡了。
javasketch
[ 2006-03-22 09:03:57 ]
不知道云顶和太阳是怎么做出来的,能不能只给这两部分的代码???急待中!!!
Admin
[ 2006-03-22 19:02:50 ]
那都是贴图, 正方形的天空盒
javasketch
[ 2006-03-22 19:24:22 ]
我按照你的方法贴了一下,可是边缘部分怎么处理?边缘有白边,还有太阳光的光晕是怎么做出来的?能不能解释一下?
javasketch
[ 2006-03-22 19:35:39 ]
你这个场景是不是加了一点雾的效果?
Admin
[ 2006-03-22 21:59:19 ]
是用了雾,
如何做光晕,可以参考nehe的一课

nehe.gamedev.net
javasketch
[ 2006-03-23 13:09:40 ]
能不能具体一点???有42课呢,而且有的效果还不是太明显,光晕也可以在其中找到吧?
Admin
[ 2006-03-23 16:44:20 ]
就是那一课.
javasketch
[ 2006-03-23 21:52:19 ]
是44课的圆桶光照???
javasketch
[ 2006-03-23 22:05:45 ]
有没有将NeHe的教程改为MFC格式???
sxly
[ 2006-04-17 14:11:13 ]
代码可以给我一份吗??学习,先谢了!!!
sxly1111@163.com
abcdeping
[ 2006-07-15 17:49:26 ]
可不可以给一份 代码,想要学习借鉴一下
abcdeping@gmail.com
piao
[ 2006-08-24 23:49:33 ]
给一分代码行吗?谢谢!
zhou_5129327@163.com
piao
[ 2006-08-25 13:28:56 ]
楼主!给一份代码吧? [cry]
piao
[ 2006-10-16 23:28:14 ]
楼主,你用MIP贴图是怎么处理裂痕的?
jarodljl
[ 2006-11-06 15:19:08 ]
可不可以给我一份代码,十分感谢
liuwei_jarod@tom.com
jarodljl
[ 2006-11-07 09:46:04 ]
楼主能否讲一下 读取1024×1024的高度值是怎样做到还能这样快速的显示的?
Admin
[ 2006-11-07 14:15:33 ]
首先高度值不是读的,是程序生成的。

加快速度,首先将场景分块,用摄像机cull一遍,

然后加上每块的LOD, 速度就提升起来了。
jarodljl
[ 2006-11-08 09:54:00 ]
高度是随机生成的吗,可是就算是随机生成的1024*102大的float型数据,内存不是也会被占很大吗,如果是3600×3600大的数据内存可能会上1G,可不可以楼主帮忙解决一下这个问题,多谢了
Admin
[ 2006-11-08 17:30:12 ]
可以考虑分端加载,不要一次全部都读进来。
duoluoxianzhi
[ 2009-03-23 20:48:59 ]
你好,我的LOD算法如果弄1025 *1025的内存会达到几百M,我看你的程序也不过几十M,请问是怎么做到的?你谈到过将内存分块载入,能具体讲讲吗?我能看看你这个DEMO的原代码吗?
whl020519
[ 2009-04-15 11:48:35 ]
前辈您好:
  目前我正在学习LOD算法,能看一看你DEMO的源代码吗?
将不胜感激!
Email:whl020519@163.com
ccx1234
[ 2009-05-17 17:47:42 ]
能给份代码吗?谢谢 Email:ccx1235@163.com
ziyan0618
[ 2010-04-07 16:49:13 ]
前辈,也发我一封吧,拜托 ziyan0621@126.com
[最后修改由 ziyan0618, 于 2010-04-07 22:29:37]
megatron
[ 2010-04-22 13:19:00 ]
前辈,给我一份源码学习学习行吗,sleepingke@vip.qq.com
谢谢了
luke3813
[ 2010-06-11 23:06:39 ]
前辈,最近正在学习地形方面的东西,能给份源码学习么? 看了前辈的文章有很多地方豁然开朗,但是关于渲染方面还有很多疑惑,希望能有份源码来参考, 谢谢!

luke3813@126.com
feiliang3828912
[ 2010-08-09 01:33:46 ]
能否发在下一份,万分感激~
feiliang3828912@126.com
osoon2008
[ 2010-08-16 20:29:16 ]
Real-Time3D Terrain Engines的码写得挺乱的,o(∩_∩)o...

此日志不可发表评论.
ħ˽ ħ˽