addToRenderList method
Implementation
void addToRenderList(WebGLRenderList renderList, Object3D scene) {
final background = getBackground( scene );
if ( background != null && ( background is CubeTexture || (background is Texture && background.mapping == CubeUVReflectionMapping)) ) {
if ( boxMesh == null ) {
boxMesh = Mesh(
BoxGeometry( 1, 1, 1 ),
ShaderMaterial.fromMap( {
'name': 'BackgroundCubeMaterial',
'uniforms': cloneUniforms( shaderLib['backgroundCube']['uniforms'] ),
'vertexShader': shaderLib['backgroundCube']['vertexShader'],
'fragmentShader': shaderLib['backgroundCube']['fragmentShader'],
'side': BackSide,
'depthTest': false,
'depthWrite': false,
'fog': false
})
);
boxMesh!.geometry?.deleteAttributeFromString( 'normal' );
boxMesh!.geometry?.deleteAttributeFromString( 'uv' );
boxMesh!.onBeforeRender = ({
renderer,
scene,
camera,
renderTarget,
mesh,
geometry,
material,
group
}) {
boxMesh!.matrixWorld.copyPosition(camera!.matrixWorld);
};
planeMesh?.material?.envMap = planeMesh?.material?.uniforms['envMap']['value'];
objects.update(boxMesh!);
}
(scene as Scene);
_e1.copy(scene.backgroundRotation);
// accommodate left-handed frame
_e1.x *= - 1; _e1.y *= - 1; _e1.z *= - 1;
if ( background is CubeTexture && !background.isRenderTargetTexture) {
// environment maps which are not cube render targets or PMREMs follow a different convention
_e1.y *= - 1;
_e1.z *= - 1;
}
boxMesh!.material!.uniforms['envMap']['value'] = background;
boxMesh!.material!.uniforms['flipEnvMap']['value'] = ( background is CubeTexture && !background.isRenderTargetTexture) ? - 1 : 1;
boxMesh!.material!.uniforms['backgroundBlurriness']['value'] = scene.backgroundBlurriness;
boxMesh!.material!.uniforms['backgroundIntensity']['value'] = scene.backgroundIntensity;
boxMesh!.material!.uniforms['backgroundRotation']['value'].setFromMatrix4( _m1.makeRotationFromEuler( _e1 ) );
boxMesh!.material!.toneMapped = ColorManagement.getTransfer( ColorSpace.fromString( background.colorSpace )) != SRGBTransfer;
if ( currentBackground != background ||
currentBackgroundVersion != background.version ||
currentTonemapping != renderer.toneMapping ) {
boxMesh!.material?.needsUpdate = true;
currentBackground = background;
currentBackgroundVersion = background.version;
currentTonemapping = renderer.toneMapping;
}
boxMesh!.layers.enableAll();
// push to the pre-sorted opaque render list
renderList.unshift(boxMesh!, boxMesh!.geometry, boxMesh!.material, 0, 0, null );
}
else if ( background != null && background is Texture ) {
if (planeMesh == null ) {
planeMesh = Mesh(
PlaneGeometry( 2, 2 ),
ShaderMaterial.fromMap( {
'name': 'BackgroundMaterial',
'uniforms': cloneUniforms( shaderLib['background']['uniforms'] ),
'vertexShader': shaderLib['background']['vertexShader'],
'fragmentShader': shaderLib['background']['fragmentShader'],
'side': FrontSide,
'depthTest': false,
'depthWrite': false,
'fog': false
} )
);
planeMesh!.geometry?.deleteAttributeFromString( 'normal' );
planeMesh!.material?.map = planeMesh!.material!.uniforms['t2D']['value'];
objects.update(planeMesh!);
}
planeMesh!.material?.uniforms['t2D']['value'] = background;
planeMesh!.material?.uniforms['backgroundIntensity']['value'] = (scene as Scene).backgroundIntensity;
planeMesh!.material?.toneMapped = ColorManagement.getTransfer( ColorSpace.fromString(background.colorSpace)) != SRGBTransfer;
if ( background.matrixAutoUpdate) {
background.updateMatrix();
}
planeMesh!.material?.uniforms['uvTransform']['value'].setFrom( background.matrix );
if ( currentBackground != background ||
currentBackgroundVersion != background.version ||
currentTonemapping != renderer.toneMapping ) {
planeMesh!.material?.needsUpdate = true;
currentBackground = background;
currentBackgroundVersion = background.version;
currentTonemapping = renderer.toneMapping;
}
planeMesh!.layers.enableAll();
// push to the pre-sorted opaque render list
renderList.unshift( planeMesh!, planeMesh!.geometry, planeMesh!.material, 0, 0, null );
}
}