美文网首页
three.js(33)-2d和3d标签对比

three.js(33)-2d和3d标签对比

作者: 姜治宇 | 来源:发表于2023-01-11 16:53 被阅读0次

2d和3d标签不同之处在于,2d的是固定大小,不会随镜头的远近而改变。
标签文字需要先创建dom对象,然后单独进行渲染,不过标签文字并不需要单独再建一个scene,可以直接追加到某个物体上作为标签即可。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <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/CSS2DRenderer.js"></script>
    <script src="http://www.yanhuangxueyuan.com/threejs/examples/js/renderers/CSS3DRenderer.js"></script>
    <title>Document</title>
    <style>
        .label {
            color: #FFF;
            padding: 2px;
            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,labelRenderer;
    init();
    render(render2d);
    // render(render3d);
    animate();
    function init(){
        scene = new THREE.Scene();
        camera = new THREE.PerspectiveCamera(90, window.innerWidth / window.innerHeight, 0.1, 1000);
        camera.position.set(10, 10, 10);
        scene.add(camera);//添加相机
        //添加坐标轴
        var axes = new THREE.AxesHelper(500);//500表示xyz轴的长度,红:x,绿:y,蓝:z
        scene.add(axes);
        const box = new THREE.Mesh(new THREE.BoxGeometry(5, 5, 5), new THREE.MeshBasicMaterial({ color: 0x0000ff }));
        scene.add(box);
        
        // box.layers.disableAll();
        // box.layers.enableAll();
        console.log(box);
        create2dLabel(box);//为物体增加标签
        // const label = create3dLabel(box);//为物体增加标签
        // label.layers.disableAll();
    }
    function create2dLabel(box){

        const div = document.createElement('div');
        div.className = 'label';
        div.innerText = 'this is a 2d label';
        const label = new THREE.CSS2DObject(div);
        
        box.add(label);
        return label;
    }
    function create3dLabel(box){
        const div = document.createElement('div');
        div.className = 'label';
        div.innerText = 'this is a 3d label';
        const label = new THREE.CSS3DObject(div);
        
        box.add(label);
        return label;
    }
    function render(callback){
        
        callback();
        renderer = new THREE.WebGLRenderer({
        antialias: true,
        alpha: true
        });//画布
        renderer.setPixelRatio( window.devicePixelRatio );
        renderer.setSize(window.innerWidth, window.innerHeight);//设置渲染区域尺寸
        renderer.setClearColor(0xb9d3ff, 1); //设置背景颜色
        document.getElementById('webgl').appendChild(renderer.domElement);
        var controls = new THREE.OrbitControls(camera, renderer.domElement);
        var controls2 = new THREE.OrbitControls(camera, labelRenderer.domElement);
    }
    function render2d(){
        //渲染标签
        labelRenderer = new THREE.CSS2DRenderer();

        labelRenderer.setSize( window.innerWidth, window.innerHeight );
        labelRenderer.domElement.style.position = 'absolute';
        labelRenderer.domElement.style.top = '0px';
        document.getElementById('webgl').appendChild( labelRenderer.domElement );
    }
    function render3d(){
        labelRenderer = new THREE.CSS3DRenderer();

        labelRenderer.setSize( window.innerWidth, window.innerHeight );
        labelRenderer.domElement.style.position = 'absolute';
        labelRenderer.domElement.style.top = '0px';
        document.getElementById('webgl').appendChild( labelRenderer.domElement );
    }
    function animate() {
        requestAnimationFrame( animate );
        renderer.render( scene, camera );
        labelRenderer.render( scene, camera );
    }
</script>

相关文章

  • three.js(33)-2d和3d标签对比

    2d和3d标签不同之处在于,2d的是固定大小,不会随镜头的远近而改变。标签文字需要先创建dom对象,然后单独进行渲...

  • three.js 入门

    一、three.js openGL跨平台3D/2D的绘图标准。wegbl是openGL在浏览器上的实现,是基础的绘...

  • 2D与3D

    前言 说到2d与3d的转换,到底什么是2d,什么又是3d,看下图: 所谓的2d和3d就是我们理解的二维空间和三维空...

  • Three.js

    Three.js 1. 概述 1.1 什么是Three.js Three.js是一个3D javascript库。...

  • 2019-08-21

    一步步带你实现web全景看房——three.js canvas画2d相信大家都很熟悉了,但3d世界更加炫酷。我们直...

  • OpenGL ES基础概念

    使用这个简洁、高效的OpenGL子集创建3D和2D图形效果。 OpenGL ES为硬件加速的2D和3D图形渲染提供...

  • 3DMax操作笔记

    3d 2d 2d转换3d 互相转换 2d线的 断开和连接 如果 连的线最后闭合会提示是否闭合,闭合方可转换为可编辑...

  • three.js 全景重力感应

    实现three.js 全景图 demo 使用three.js 写了球体和圆柱体版本的3D重力感应全景图,支持手指触...

  • day22-CSS-3D转换模块

    3D转换模块 2D和3D的区别 坐标系:2D:xy轴--平面 3D:xyz轴--立体 默认情况下所有的元素都是2D...

  • web前端-CSS3 3D转换

    2D和3D的区别 2D是一个平面, 只有高度和宽度. 3D是一个立体, 有高度和宽度还有厚度. 元素默认情况下都是...

网友评论

      本文标题:three.js(33)-2d和3d标签对比

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