LCCObject::setRenderState
设置 LCC 模型的 RenderState 状态。
包括深度测试、深度写入、渲染 Pass 等参数。
版本要求
SDK v0.4.0+
引擎支持
CesiumJS
API
LCCObject::setRenderState(renderState: RenderStateParam): void
参数
| 参数 | 类型 | 必选 | 默认值 | 描述 |
|---|---|---|---|---|
renderState.depthTest | Object | 否 | - | 深度测试配置。 |
renderState.depthTest.enabled | boolean | 否 | true | 是否开启深度测试。 |
renderState.depthTest.func | number | 否 | - | 深度测试函数,如 Cesium.WebGLConstants.ALWAYS。 |
renderState.depthMask | boolean | 否 | true | 是否写入深度。 |
renderState.passIndex | number | 否 | Cesium.Pass.CESIUM_3D_TILE | Cesium 渲染 Pass。 |
renderState.stencilTest | Object | 否 | - | 模板测试配置。SDK v0.5.0+ |
返回值
void
使用示例
推荐的深度测试组合(SDK v0.4.0+)
LCC 模型写入深度,并在较优先的 Pass 渲染。后续 Cesium 对象开启深度测试时,可以获得正确的遮挡关系。
const renderState = {
depthTest: {
enabled: true,
func: Cesium.WebGLConstants.ALWAYS,
},
depthMask: true,
passIndex: Cesium.Pass.CESIUM_3D_TILE
};
lccObject.setRenderState(renderState);
透明物体通道(SDK v0.4.0+)
使用 Pass.TRANSLUCENT 时,物体间的遮挡关系依赖于 Cesium 引擎对场景中所有透明物体的排序结果,排序方式与相机到场景包围盒的距离有关。该模式下遮挡结果可能与 raiseToTop()、lowerToBottom() 的预期不一致。
const renderState = {
depthTest: {
enabled: true,
func: Cesium.WebGLConstants.LESS,
},
depthMask: false,
passIndex: Cesium.Pass.TRANSLUCENT
};
lccObject.setRenderState(renderState);
使用模板测试(SDK v0.5.0+)
const renderState = {
depthTest: {
enabled: true,
func: Cesium.WebGLConstants.ALWAYS,
},
depthMask: true,
passIndex: Cesium.Pass.CESIUM_3D_TILE,
stencilTest: Cesium.StencilConstants.setCesium3DTileBit()
};
lccObject.setRenderState(renderState);
注意事项
- 此接口可以在
LCCRender.load()后立即同步调用。 - v0.4.0、v0.4.1 版本仅支持
depthTest、depthMask、passIndex参数。 - v0.5.0+ 支持所有 RenderState 参数,会将设置参数进行合并。
- 使用
depthMask: false时,深度写入关闭,此时 LCC 模型与其他透明物体的遮挡关系依赖于 Cesium 引擎的排序结果。
相关 API
LCCObject::lowerToBottom()LCCObject::raiseToTop()