参考:
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()
// 使用 Uniform
Contex.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 |