美文网首页
three.js(34)-网格工具

three.js(34)-网格工具

作者: 姜治宇 | 来源:发表于2023-01-12 10:17 被阅读0次

在场景中摆放物体时,它们之间的间距到底是多少?可以借助网格工具来精确绘制。

<!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">
    <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>
</head>

<body>
    <div id="webgl"></div>
</body>

</html>
<script>
    var camera, scene, renderer, plane;
    init();
    function init() {
        camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 1, 1000);
        camera.position.set(0, 200, 0);
        scene = new THREE.Scene();
        scene.background = new THREE.Color(0xffffff);
        //创建坐标轴
        createAxis(scene);
        // 网格辅助工具
        createGrid(scene);
        // 创建平面
        createPlane(scene);
        // createBox(scene);
        render(document.getElementById('webgl'));

    }
    function createAxis(scene) {
        // 坐标轴辅助工具
        var axes = new THREE.AxesHelper(500); //500表示xyz轴的长度,红:x,绿:y,蓝:z
        scene.add(axes);
    }
    function createGrid(scene) {
        const gridHelper = new THREE.GridHelper(1000, 20); //长度1000,每个格子是50x50的单元格
        gridHelper.material.opacity = 0.2;
        gridHelper.material.depthWrite = false;
        gridHelper.material.transparent = true;
        scene.add(gridHelper);
    }
    function createPlane(scene) {
        const geomeplanetry = new THREE.PlaneGeometry(600, 100);
        geomeplanetry.rotateX(- Math.PI / 2);//旋转,弧度

        plane = new THREE.Mesh(geomeplanetry, new THREE.MeshBasicMaterial({ color: new THREE.Color(0x00ffff) }));
        scene.add(plane);
    }
    function createBox(scene) {
        const texture = new THREE.TextureLoader().load('img/crate.gif');
        const material = new THREE.MeshBasicMaterial({ map: texture });
        const box = new THREE.Mesh(new THREE.BoxGeometry(150, 150, 150), material);
        box.position.set(10, 10, 10);
        scene.add(box);
    }
    function render(dom) {
        renderer = new THREE.WebGLRenderer({
            antialias: true,

        });//画布
        renderer.setSize(window.innerWidth, window.innerHeight);//设置渲染区域尺寸
        dom.appendChild(renderer.domElement);
        var controls = new THREE.OrbitControls(camera, renderer.domElement);
    }
    animate();

    function animate() {

        renderer.render(scene, camera);//开始渲染

        requestAnimationFrame(animate);

    }
</script>
5.png

相关文章

网友评论

      本文标题:three.js(34)-网格工具

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