一.css渲染器基本使用
使用场景:经常在一些3D物体左右还会跟随一些文字等,实际都是标签,应用场景非常广泛
![](https://img2023.cnblogs.com/blog/2680817/202502/2680817-20250207154940695-1758230438.png)
先完成基本的3D,月球围绕地球转,这里就是给月球加了sin函数
![](https://img2023.cnblogs.com/blog/2680817/202502/2680817-20250207154940381-1581302638.png)
![](https://img2023.cnblogs.com/blog/2680817/202502/2680817-20250207154940056-1672010008.gif)
然后现在就先创建一个标签体出来
![](https://img2023.cnblogs.com/blog/2680817/202502/2680817-20250207154939666-2081149661.png)
2D渲染器出了暴露出来一个渲染器还有一个对象器
![](https://img2023.cnblogs.com/blog/2680817/202502/2680817-20250207154939351-92818396.png)
![](https://img2023.cnblogs.com/blog/2680817/202502/2680817-20250207154939003-1707199516.png)
但是到这里并不会显示出来,还要创建2D渲染器跟渲染器差不多
![](https://img2023.cnblogs.com/blog/2680817/202502/2680817-20250207154938703-1896457920.png)
这样就是出来两个一样大小的元素,但是需要重叠一下
![](https://img2023.cnblogs.com/blog/2680817/202502/2680817-20250207154938350-862731934.png)
设置固定定位,并且跟随render一起渲染
![](https://img2023.cnblogs.com/blog/2680817/202502/2680817-20250207154938033-176419256.png)
![](https://img2023.cnblogs.com/blog/2680817/202502/2680817-20250207154937755-582748768.png)
如果发现此时由于2D渲染器在上面,导致3D的缩放旋转等不生效
![](https://img2023.cnblogs.com/blog/2680817/202502/2680817-20250207154937443-10021579.png)
![](https://img2023.cnblogs.com/blog/2680817/202502/2680817-20250207154937194-1083563656.png)
二.添加多个元素标签跟随物体移动
首先添加月球div
![](https://img2023.cnblogs.com/blog/2680817/202502/2680817-20250207154936879-1555218332.png)
给月球添加上后会自动跟着球体走
![](https://img2023.cnblogs.com/blog/2680817/202502/2680817-20250207154936587-1975588026.gif)
再在地球上标注中国
这里需要注意一下,如果想字跟着转动走,需要设置xyz轴,特别是z轴
![](https://img2023.cnblogs.com/blog/2680817/202502/2680817-20250207154936257-1653584531.png)
![](https://img2023.cnblogs.com/blog/2680817/202502/2680817-20250207154935836-1884961475.gif)
三.使用射线碰撞来检测标签显示隐藏
在刚才的案例中有两个问题
一个是当我们调整浏览器视图尺寸,文字的定位就出现问题了
![](https://img2023.cnblogs.com/blog/2680817/202502/2680817-20250207154935289-1293439022.png)
这个需要在不断运动中,重新计算2D渲染器尺寸就可以了
![](https://img2023.cnblogs.com/blog/2680817/202502/2680817-20250207154934979-197245966.png)
第二个是,当我们移动到美洲这边,中国都被挡住了,但是文字还在
这里的思路是这样的
从中国两个字和摄像机打一条射线过去,通过穿过的物体来判断,先判断有没有,如果没有就要显示,因为穿过去没有物体只有两种情况
一个是中国在最左边,一个是在最右边此时射线穿过去,是没有物体的,但是这个时候中国已经出来了所以要显示
![](https://img2023.cnblogs.com/blog/2680817/202502/2680817-20250207154934698-539957321.png)
然后是有的情况下,有的情况下,文字在前和在后,射线穿过去都会有,这个时候我们通过文字到摄像机的距离和物体到摄像机的距离判断,如果物体到摄像机的距离比文字还要小,说明文字在背后去了不显示,这里注意3D物体有个方法可以计算到某一个点的距离
实例化射线
![](https://img2023.cnblogs.com/blog/2680817/202502/2680817-20250207154934393-2010573040.png)
![](https://img2023.cnblogs.com/blog/2680817/202502/2680817-20250207154934090-1049783618.png)
![](https://img2023.cnblogs.com/blog/2680817/202502/2680817-20250207154933548-1534835142.gif)