Ala*_*eod 1 level-of-detail three.js
只是寻找一些一般的指导,自从我摆弄任何3D以来,已经有很长一段时间了,如果你原谅可怕的双关语,那么风景已经发生了很大变化.
我有许多非常详细的3D模型(每个都是3M +面),这些模型是从需要在浏览器中渲染的真实地形扫描生成的.它们是"不规则的",不能从网格/ DEM或任何东西渲染.
我已经将模型划分为更小的对象,并为每个对象(3个级别)生成LOD,这会生成一组公共顶点和三个索引缓冲区,这些缓冲区引用我逐渐传输到JS客户端的部分或全部顶点.
我打算通过根据与相机的距离为每个对象指定LOD,在一帧之间渲染500k-1M多边形.
所以我的问题是,如何在这些级别之间有效切换?
我尝试过天真的方法,当数据发送到GPU时,自然会在帧速率上产生颠簸和毛刺.但我正在寻找一种方法将所有数据(顶点和三个索引缓冲区)发送到GPU内存,然后告诉它使用特定的索引缓冲区渲染,比如低分辨率缓冲区,然后切换到med或者高当相机靠近时,res缓冲区.
Three.LOD()解决方案似乎对我没有任何用处,因为它只会产生与我的天真解决方案相同的fps故障.
无论多么一般,都会感谢一些指导.干杯!
您希望根据与相机的距离高效,平滑地改变对象的细节层次(LOD).
根据您的使用案例,一种解决方案是为每个对象创建一个BufferGeometry包含所有三个细节级别的对象.换句话说,您将使用"索引"缓冲区几何体,指定共享顶点数组,并将三个索引数组连接成一个.
然后,设置drawRange您的属性BufferGeometry以渲染所需的LOD面.
geometry.setDrawRange( startIndex, count );
Run Code Online (Sandbox Code Playgroud)
几何体将被推到GPU一次,改变LOD只是改变drawRange一个均匀的问题,这应该是柔滑的.
three.js r.75
| 归档时间: |
|
| 查看次数: |
1374 次 |
| 最近记录: |