<!DOCTYPE html>
<html>

<head>
    <meta charset="UTF-8">
    <title>three.js从入门到精通系列教程008 - three.js渲染器之SVG渲染器和WebGL渲染器</title>
    <script src="ThreeJS/three.js"></script>
    <script src="ThreeJS/jquery.js"></script>
    <script src="ThreeJS/Projector.js"></script>
    <script src="ThreeJS/SVGRenderer.js"></script>
</head>

<body>
    <p><button id="myButton1">启用SVG渲染器</button>
        <button id="myButton2">启用WebGL渲染器</button>
    </p>
    <center id="myContainer"></center>
    <script>
        var isSVGRenderer = true;
        //创建渲染器myRenderer1
        var myRenderer1 = new THREE.SVGRenderer();
        myRenderer1.setSize(window.innerWidth / 2, window.innerHeight / 2);
        //创建渲染器myRenderer2
        var myRenderer2 = new THREE.WebGLRenderer({ antialias: true });
        myRenderer2.setSize(window.innerWidth / 2, window.innerHeight / 2);
        var myCamera = new THREE.PerspectiveCamera(45,
            window.innerWidth / window.innerHeight, 0.1, 1000);
        myCamera.position.z = 4;
        var myScene = new THREE.Scene();
        myScene.background = new THREE.Color(0xffffff);
        //创建图形
        var myVertices = [];
        for (var i = 0; i <= 150; i++) {
            var v = (i / 150) * (Math.PI * 2);
            var x = Math.sin(v);
            var z = Math.cos(v);
            myVertices.push(x, 0, z);
        }
        var myGeometry = new THREE.BufferGeometry();
        myGeometry.setAttribute('position',
            new THREE.Float32BufferAttribute(myVertices, 3));
        for (var i = 1; i <= 3; i++) {
            var myMaterial = new THREE.LineBasicMaterial({
                color: Math.random() * 0xffffff,
                linewidth: 20
            });
            var myLine = new THREE.Line(myGeometry, myMaterial);
            myLine.scale.setScalar(i / 3);
            myScene.add(myLine);
        }
        //渲染图形
        animate();
        function animate() {
            var myOffset = 0;
            var myTime = performance.now() / 1000;
            myScene.traverse(function (child) {
                child.rotation.x = myOffset + (myTime / 3);
                child.rotation.z = myOffset + (myTime / 4);
                myOffset++;
            });
            var myRenderer = myRenderer1;
            $("#myContainer").html('');
            if (isSVGRenderer) { myRenderer = myRenderer1; }
            else { myRenderer = myRenderer2; }
            $("#myContainer").append(myRenderer.domElement);
            myRenderer.render(myScene, myCamera);
            requestAnimationFrame(animate);
        }
        //响应单击“启用SVG渲染器”按钮
        $("#myButton1").click(function () {
            isSVGRenderer = true;
        });
        //响应单击“启用WebGL渲染器”按钮
        $("#myButton2").click(function () {
            isSVGRenderer = false;
        });
    </script>
</body>

</html>

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐