惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

IT之家
IT之家
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
A
About on SuperTechFans
博客园 - 聂微东
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
B
Blog RSS Feed
U
Unit 42
Stack Overflow Blog
Stack Overflow Blog
Recent Announcements
Recent Announcements
雷峰网
雷峰网
罗磊的独立博客
Microsoft Security Blog
Microsoft Security Blog
Hugging Face - Blog
Hugging Face - Blog
L
LangChain Blog
人人都是产品经理
人人都是产品经理
The GitHub Blog
The GitHub Blog
F
Fortinet All Blogs
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
H
Help Net Security
P
Proofpoint News Feed
The Cloudflare Blog
D
Docker
大猫的无限游戏
大猫的无限游戏

博客园 - 大河马和小魔鱼

[zz]dds [zz]Shader programming tips #1 [zz]如何使用effect [论文摘要]Tips and Tricks for D3DX Effects-Based Renders [zt]矩阵和向量的乘法顺序 [论文简要]Integrating Shaders Into the Vision Rendering Engine Depth Bias Planar Shadow Instancing 渲染简要 球面环境贴图 MaxScript 心得1 - 大河马和小魔鱼 - 博客园 Export利器:IGame MAX Script Export/Import 3DS MAX PlugIn 材质和纹理 牛刀小试,Max Script 3DS MAX PlugIn(2) 邂逅Geometry [原创]3DS MAX PlugIn 1 预备役 Novodex2.6.2 布料系统 Novodex,ODE,Tokamak,Bullet,Newton......
原来我一直在做傻事
大河马和小魔鱼 · 2006-11-03 · via 博客园 - 大河马和小魔鱼

前天洗澡的时候突然想到一个想法
似乎我总是在洗澡的时候才有灵感

我给部队做到虚拟战场的项目
由于涉及到一个室外场景的漫游
所以技术的主要难点就在terrain上面了

由于要求显示弹坑,
并且最小直径为1米,
所以最开始的解决方案我想都没想
做了一块3000*3000个网格的地形
用八叉树+基于patch 剔除的Geomipmap LOD,
后来发现其实这样的话效果其实并不好,速度勉强够
后来决定用动态读入的方法
每次只读入视点周围的256*256个网格,
视点在一个方向上移动超过一定距离就再读
这样的效果不错,
速度很快,本来打算如果速度不快 再针对这一小块做lod
看来不需要了,
但是还有一个问题,就是每次只显示有视点周围256*256的地形
那么就有很大一部分是空的
最开始直接想用个体积雾挡住的
后来也是偶然想到一个简单的解决方法,
在这块地形下面再画一块只有4个顶点的3000*3000的地形
因为部队只是需要一块平的地面,所以正好可以用这一块假的terrain
这样2块地形配合起来正好看不出来。

昨天我想到
其实我一直在做傻事
本来弹坑就不是很多
完全没有必要做一块那么大的地形
做这么大一块地形虽然速度上没有问题,但是每次读入的数据还是很大
更好的方法是
每个弹坑动态的生成一个Mesh,这个mesh按照弹坑直径的要求生成
也就是说最大也不过10*10
然后将这个mesh 加入到场景中,
画的时候把深度测试关掉就一切Ok,
这样还有一个好处,弹坑的纹理可以单独指定,
以前的做法都是用glSubTexture2d (似乎是这么写,不记得了)动态的在整个terrain的纹理上修改
由于整块地形是3000*3000 不是2的n次幂
为了简化工作我直接作了一张特大纹理
纹理是一张2048*2048的一张图
拉升也很严重,有人会说opengl2.0支持非2的n次幂纹理
确实,但是glSubTexture2d 那个函数不支持
2048拉升到3000,加上很多弹坑本来就只有1米,2米
对应到纹理的像素 其实只有1-2个像素
现在好了,把弹坑单独提出来做
什么问题都解决了

其实也想起来
刚开始做这个项目的时候
在论坛上看到有人说过类似的方法
无奈当时不当回事
转了个大圈子 还是回到了原地