Babylon源码解析-meshs渲染流程

1,209 阅读1分钟

之前项目一直使用Three.js,最近新的项目开始用Babylon进行开发,用了一段时间发现,和Three.js还是差距挺大的,所以打算花点时间看看BabylonJs的源码,熟悉下这个库.

首先,meshs 储存在scene中

image.png

scene中有个渲染管理器(scene.ts)

  1. 调用 scene.render()

会执行到

this._processSubCameras(this.activeCamera, false);

然后会进入到这个方法

然后看到Meshs相关的操作

这个方法对有效的mesh 都执行了

最后如果这个网格没异常,就会触发渲染管理器的钩子

之后管理器会默认把网格放到渲染组0

然后触发渲染组的钩子

渲染组会把网格推到对应的渲染队列

这个对应什么时候会更新呢?回到Scene _renderForCamera方法

上面逻辑执行完后,会触发渲染管理器render

这个渲染方法会对每个渲染组执行对应的render

如果没有对应的自定义渲染方式,就会看到对应的渲染队列的方法

点进去看下这个渲染方法有2种

2种方法最后都是调用SubMesh.render

然后会调用Mesh.render

这个方法主要就是通过封装的Webgl api,把网格渲染出来