> 文章列表 > 渲染02-内置Uniform

渲染02-内置Uniform

渲染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;},})
}

渲染02-内置Uniform

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