美文网首页
three.js(27)-标签文字

three.js(27)-标签文字

作者: 姜治宇 | 来源:发表于2023-01-04 11:29 被阅读0次
    8.png

    一般场景的物体都是用WebGLRenderer来渲染,而标签文字因为涉及到dom,因此需要使用CSS3DRenderer来单独渲染。

    <!DOCTYPE html>
    <html lang="en">
    
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Document</title>
        <script src="http://www.yanhuangxueyuan.com/threejs/build/three.min.js"></script>
        <script src="http://www.yanhuangxueyuan.com/threejs/examples/js/controls/OrbitControls.js"></script>
        <script src="http://www.yanhuangxueyuan.com/threejs/examples/js/renderers/CSS3DRenderer.js"></script>
        <style>
            .tag {
                width: 200px;
                padding: 10px;
                color: #fff;
                background-color: rgb(20, 143, 211, 0.68);
                box-shadow: 0 0 12px rgba(0, 128, 255, 0.75);
                border: 1px solid rgba(127, 177, 255, 0.75);
    
            }
        </style>
    </head>
    
    <body>
        <div id="webgl"></div>
    
    </body>
    
    </html>
    <script>
        var scene, camera, renderer,renderer2;
        init();
        function init() {
            //场景
    
            scene = new THREE.Scene();
    
            //相机设置为世界坐标原点
            camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000);
            camera.position.set(0, 0, 100);
            scene.add(camera);//添加相机
    
            //添加坐标轴
            var axes = new THREE.AxesHelper(500);//500表示xyz轴的长度,红:x,绿:y,蓝:z
            scene.add(axes);
            //创建物体
            createBox(scene);
            //添加标签文字
            createTag(scene);
            render();
            animate();
        }
    
        function createBox(scene) {
            var geometry = new THREE.BoxGeometry(10, 10, 10);//几何体
            var material = new THREE.MeshBasicMaterial({ color: 0x00ff00 });//材质
            var cube = new THREE.Mesh(geometry, material);//渲染管线
            cube.position.set(0, 0, -10);
            scene.add(cube);
        }
        function createTag(scene) {
            const element = document.createElement('div');
            element.className = 'tag';
            element.innerHTML = `<p>名称:一个箱子</p><p>材质:绿色</p>`;
            const tag = new THREE.CSS3DObject(element);
    
            //缩放比例
            tag.scale.set(0.2, 0.2, 0.2);
            //指定摆放位置
            tag.position.set(0, 16, -10);
            scene.add(tag);//添加到指定的场景里
    
        }
        function render() {
            renderer = new THREE.WebGLRenderer({
                antialias: true,
                alpha: true
            });//画布
            renderer.setSize(window.innerWidth, window.innerHeight);//设置渲染区域尺寸
            renderer.setClearColor(0xb9d3ff, 1); //设置背景颜色
            var cont = document.getElementById('webgl');
            cont.appendChild(renderer.domElement);
    
            //设置dom元素的渲染
            renderer2 = new THREE.CSS3DRenderer();
            renderer2.setSize(window.innerWidth, window.innerHeight);
            renderer2.domElement.style.position = 'absolute';
            renderer2.domElement.style.top = 0;
            cont.appendChild(renderer2.domElement);
    
            var controls = new THREE.OrbitControls(camera, renderer2.domElement);
    
        }
    
    
        function animate() {
    
            renderer.render(scene, camera);//开始渲染
            renderer2.render(scene, camera);
            requestAnimationFrame(animate);
    
        }
    
    
    </script>
    

    相关文章

      网友评论

          本文标题:three.js(27)-标签文字

          本文链接:https://www.haomeiwen.com/subject/sfyrcdtx.html