渲染02-内置Uniform
参考:
CesiumJS 源码杂谈 - 从光到 Uniform
渲染02-内置Uniform
1 Unifrom 的接口
路径: pacaages/engin/Source/Renderer/AutomaticUniforms.js
AutomaticUniforms
实际上是 Cesium
暴露给着色使用的接口集合。
AutomaticUniforms┖ AutomaticUniform(czm_projection/czm_viewport/czm_viewportOrthographic...)
// AutomaticUniform包含:
czm_projection
czm_viewport
czm_viewportOrthographic
...
AutomaticUniforms = {czm_projection: new AutomaticUniform({size: 1,datatype: WebGLConstants.FLOAT_MAT4,getValue: function (uniformState) {return uniformState.projection;},})
}
2 Unifrom 的更新
内置unifrom实际上是 UniformState 负责更新。
路径: pacaages/engin/Source/Renderer/UniformState.js
类的从属关系:
Scene┣ FrameState(_frameState)┖ context┖ Context(_context)┖ UniformState(_us)
UniformState
更新的函数调用关系:
// Scene.js
fn render()UniformState.update();this.updateCamera();
3 Unifrom 的使用
同 DrawCommand
的执行。
简化版调用过程:
// Scene.js
fn render()// 1) 更新Uniform值UniformState.update();// 更新相机相关参数UniformState.updateCamera(camera);// 2) 执行命令DrawCommand.execute()// 使用 UniformContex.draw();
UniformState 关键成员:
czm_xxx 文档
来源 | UniformState | cesium.js | 说明 | size | three.js |
---|---|---|---|---|---|
camera.viewMatrix | view3D | czm_view3D | 世界转眼睛视图矩阵 | 4*4 | viewMatrix |
camera.viewMatrix | viewRotation3D | czm_viewRotation3D | 视图矩阵的旋转部分 | 3*3 | none |
camera.viewMatrix | inverseView3D | czm_inverseView3D | 眼睛转换为世界 | 4*4 | none |
frustum.projectionMatrix | projection | czm_projection | 眼睛转剪裁投影矩阵 | 4*4 | projectionMatrix |
frustum.projectionMatrix | inverseProjection | czm_inverseProjection | 剪裁转眼睛 | 4*4 | none |
view3D * _model | modelView3D | czm_modelView3D | 模型视图矩阵 | 4*4 | modelViewMatrix |
todo | modelViewRelativeToEye | czm_modelViewRelativeToEye | todo | 4*4 | none |
_projection * view3D | viewProjection | czm_viewProjection | 视图投影矩阵 | 4*4 | none |