zoukankan      html  css  js  c++  java
  • tree,js的简单实现内容显示

    tree,js的简单实现内容显示,对模型的gltf进行引用内容显示

    加载所用资源https://github.com/mrdoob/three.js

    整理后代码{

    <!DOCTYPE html>
    <html>
        <head>
            <meta charset=utf-8>
            <title>My first three.js app</title>
            <style>
                body { margin: 0; }
                canvas { width: 100%; height: 100% }
                #box{
                    width: 900px;
                    height: 600px;
                    background: #f00;
                }
            </style>
        </head>
        <body>
            <div id="box"></div>
            <script src="./js/three.js"></script>
            <script type="module">
                import { GLTFLoader } from './three/examples/jsm/loaders/GLTFLoader.js';
                import { OrbitControls } from './three/examples/jsm/controls/OrbitControls.js';
                var renderer,scene,camera,light,loader,controls;
                var width,height;
                // 初始化渲染器 Renderer
                function initRenderer() {
                    width = document.getElementById("box").clientWidth;
                    height = document.getElementById("box").clientHeight;
                    renderer = new THREE.WebGLRenderer({
                        antialias:true
                        // canvas: document.getElementById('box')
                    });/*生成渲染器对象(属性:抗锯齿效果为设置有效)*/
                    renderer.setSize(width,height);
                    document.getElementById("box").appendChild(renderer.domElement);
                    /*设置canvas背景色(clearColor)和背景色透明度(clearAlpha) */
                    renderer.setClearColor(0xFF0000, 1); //设置背景颜色
                }
                // 初始化场景 Scene
                function initScene(){
                    scene = new THREE.Scene();
                }
                // 初始化相机 Camera
                function initCamera() {
                    camera=new THREE.OrthographicCamera(-2, 2, 1.5, -1.5, 1, 10);
                    //定义camera的位置
                    camera.position.set(4, -3, 5);
                    //这里的lookAt函数是将视角指定为看原点
                    camera.lookAt(new THREE.Vector3(0, 0, 0));
                    //将camera添加到scene中
                    scene.add(camera);
                }
                // 初始化光源light
                function initLight() {
                    light = new THREE.DirectionalLight(0xFF0000, 1.0, 0); //平行光
                    light.position.set(100, 100, 200); //设置光源位置
                    scene.add(light); //将光源添加到场景
                }
                // 创建一个长方体
                function initCube() {
                    //这里是创建一个长方形
                    var cube = new THREE.Mesh(new THREE.BoxGeometry(1, 1, 1),
                        new THREE.MeshBasicMaterial({
                            color: "green",
                            wireframe: true //这里指不使用实心材料,所以为true
                        })
                    );
                    //这里要将这个长方形加入这个scene中
                    scene.add(cube);
                }
                // gltf模型加载
                function initGltf() {
                    var loader = new GLTFLoader();
                    loader.load( 'pathD/scene.gltf', function ( gltf ) {
                        console.log(gltf.scene,'----gltf')
                        // 加载出来贴片图片(加载纹理)
                        gltf.scene.traverse( function ( child ) {
                            if ( child.isMesh ) {
                                child.material.emissive =  child.material.color;
                                child.material.emissiveMap = child.material.map ;
                            }
                        } );
                        // 图形缩放
                        gltf.scene.scale.set(0.3,0.3,0.3)
                        // gltf.scene.rotation.set(100,100,100)
                        // 添加到创景中
                        scene.add(gltf.scene);
                    }, undefined, function ( error ) {
                        console.error( error );
                    });
                }
                // 相机空间
                function initcontrols() {
                    controls = new OrbitControls( camera, renderer.domElement );
                    controls.target.set( 0, 0.5, 0 );
                    controls.update();
                    controls.enablePan = false;
                    controls.enableDamping = true;
                }
                // 全部加载
                function threeExcute() {
                    //初始化渲染器
                    initRenderer();
                    //初始化场景
                    initScene();
                    //初始化照相机
                    initCamera();
                    //初始化光源
                    initLight();
                    //相机空间
                    initcontrols();
                    //长方体
                    initCube();
                    //3d图形
                    initGltf();
                }
                threeExcute()
                var animate = function () {
                    requestAnimationFrame( animate );
                    controls.update();
                    renderer.render( scene, camera );
                };
                animate();
            </script>
        </body>
    </html>

    未整理,

    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="utf-8">
            <title>My first three.js app</title>
            <style>
                body { margin: 0; }
                canvas { display: block; }
            </style>
        </head>
        <body>
            <script src="./js/three.js"></script>
            <script type="module">
            import { GLTFLoader } from './three/examples/jsm/loaders/GLTFLoader.js';
            import { OrbitControls } from './three/examples/jsm/controls/OrbitControls.js';
            var scene = new THREE.Scene();
            var renderer = new THREE.WebGLRenderer();
            renderer.setSize( window.innerWidth, window.innerHeight );
            document.body.appendChild( renderer.domElement );
            var camera = new THREE.PerspectiveCamera( 75, window.innerWidth / window.innerHeight, 0.1, 1000 );
            var loader = new GLTFLoader();
            let gltf2=null;
            loader.load( 'pathD/scene.gltf', function ( gltf ) {
                console.log(gltf,'----')
                gltf2=gltf.scene
                gltf.scene.traverse( function ( child ) {
                    if ( child.isMesh ) {
                        child.material.emissive =  child.material.color;
                        child.material.emissiveMap = child.material.map ;
                    }
                } );
                gltf.scene.scale.set(0.3,0.3,0.3)
                scene.add( gltf.scene);
            }, undefined, function ( error ) {
    
                console.error( error );
            } );
            // 相机空间
            const controls = new OrbitControls( camera, renderer.domElement );
            controls.target.set( 0, 0.5, 0 );
            controls.update();
            controls.enablePan = false;
            controls.enableDamping = true;
            addEventListener('click', onMouseDblclick, false);
            function onMouseDblclick(a){
                console.log(a,'------nero')
            }
            // 窗口变动触发的方法
            function onWindowResize() {
                camera.aspect = window.innerWidth / window.innerHeight;
                camera.updateProjectionMatrix();
                renderer.setSize(window.innerWidth, window.innerHeight);
            }
            camera.position.z = 5;
            renderer.setClearColor(0xcccccc, 1); //设置背景颜色
            var animate = function () {
                requestAnimationFrame( animate );
                controls.update();
                // if(gltf2)gltf2.rotation.y += 0.01;
                // position位置  rotation 角度
                renderer.render( scene, camera );
            };
            animate();
            
            </script>
        </body>
    </html>
  • 相关阅读:
    PHP基本语法
    SQL-还原数据库,数据库提示正在还原中的处理办法
    MyBatis学习笔记
    Java byte数据转换和处理总结
    JS和JQUERY的区别
    .NET 之 ORM 性能评测
    你必须知道的 SmartSql !
    SmartSql 介绍
    SmartSql 入门
    SmartCode.ETL 这不是先有鸡还是蛋的问题!
  • 原文地址:https://www.cnblogs.com/enhengenhengNymph/p/14689753.html
Copyright © 2011-2022 走看看