mapbox-developer-group / Mapbox-Tech-Q-A

在提问之前请自行查看文档哦,养成好习惯:https://docs.mapbox.com/
32 stars 1 forks source link

如何处理custom layer中使用renderer.clear()带来的深度消失问题? #12

Open AmeliaWang93 opened 4 years ago

AmeliaWang93 commented 4 years ago

利用custom layer添加threejs场景,但一旦使用renderer.clear(), 会把深度缓冲区、颜色缓冲区都清空,包括mapbox地图部分的。想问一下,mapbox在重绘的时候应该也是把帧缓冲区都清空了吧。所以,现在想到的是,是否有可能在render()中监听到mapbox已经重绘了(重绘完成了)地图?另,这个重绘过程是否是同步的?谢谢!

dazhi1011 commented 4 years ago

@AmeliaWang93 custom layer的render()调用是包含在mapbox的重绘过程中的……不清楚你的情景,clear的目的是什么?如果是three默认clear的,可以在onAdd里设置renderer.autoClear=false;如果是预处理需要clear,可以在prerender中处理。希望对你有帮助

AmeliaWang93 commented 4 years ago

@dazhi1011 谢谢你的回答,我是想用EffectComposer,看了一下处理的代码,会把深度缓冲区、颜色缓冲区清除,所以加进去后,threejs部分始终浮在地图之上。还有看到的一些使用layers的案例,会用到renderer.clear()

dazhi1011 commented 4 years ago

@AmeliaWang93 要加合成效果的话肯定需要frameBuffer,将中间结果绘制到texture中暂存以备后用,three不太熟思路应该差不多,EffectComposer都封装好了,你需要看看代码拆分下把预处理的部分放到custom layer的prerender接口方法中,render接口方法中只留最后需要渲染到屏幕的部分,试试看。

Jing-flyloveyin commented 4 years ago

@AmeliaWang93 请问是否解决了您的问题呢?

AmeliaWang93 commented 4 years ago

@Jing-flyloveyin 不好意思,还没试验成功