How can CSS2DObject be occluded by mesh objects,like Sprite

https://jsfiddle.net/erntcob8/4/

When I want to rotate, if the red earth blocks the label label2222, then the label label2222 doesn’t show .

this.rayObj = function(scene,camera, near,far)
		{
			this.near = near || 0;
			this.far = far || Infinity;
			scene.traverse(  ( object )=> {

				if ( object instanceof CSS2DObject )
				{
					let visible = "visible";
					let posCam = new Vector3().setFromMatrixPosition( camera.matrixWorld );
					let posMesh = new Vector3().setFromMatrixPosition( object.parent.matrixWorld );

					// 判断是否在距离内
					let dis = posCam.clone().distanceTo(posMesh);
					if(visible == "visible")
					{
						if(dis < this.near || dis > this.far)
						{
							visible = "hidden";
						}
					}

					// 判断是否有遮挡
					if(visible == "visible")
					{
						let dir = posMesh.clone().sub(posCam).normalize();
						let raycaster = new Raycaster(posCam, dir,camera.near,camera.far);
						let intersects = raycaster.intersectObjects( scene.children );

						for(let i = 0; i < intersects.length; i++)
						{
							if(intersects[i].object instanceof AxesHelper)
							{
								continue;
							}
							if(intersects[i].object == object.parent)
							{
								continue;
							}
							visible = "hidden";
						}
					}
					object.element.style.visibility = visible;

				}

			} );
		};

you can see it working here: Mixing HTML and WebGL w/ occlusion - CodeSandbox
or animated occlusion: HTML Markers - CodeSandbox

1 Like

This example is buggy and cannot be previewed

https://drei.pmnd.rs/?path=/story/misc-html--html-raycast-occluder-st

How do I implement this if I use native Threejs