当前位置: 首页 > article >正文

3.Three.js程序基本框架结构和API说明

Three.js程序基本框架结构和API说明

1.基本框架结构代码

一个基本的Three.js程序,基本都需要设置场景、渲染器、相机、灯光等等通用操作,因而我们可以把Three.js基本程序框架进行整理,如下。其中,我们可以用Three.js提供的OrbitControls拓展库对Three.js场景进行鼠标操作。代码如下:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>Three框架</title>
        <script src="../three.js-master/build/three.js"></script>
        <script src="../three.js-master/examples/js/controls/OrbitControls.js"></script>
        <style type="text/css">
            body{
            margin: 0;
            padding: 0;
            overflow-y: hidden;
            overflow-x: hidden;
        }
        div#webgl {
        
            width: 100vw;
            height: 100vh;
    
        }

        </style>
        <script>
            var renderer;
            function initThree() {
                let dom = document.getElementById('webgl');
                width = dom.clientWidth;
                height = dom.clientHeight;
                renderer = new THREE.WebGLRenderer({
                    antialias : true
                });
                renderer.setSize(width, height);
                dom.appendChild(renderer.domElement);
                renderer.setClearColor(0xFFFF00, 1.0);
            }

            var camera;
            function initCamera() {
                camera = new THREE.PerspectiveCamera(45, width / height, 1, 10000);
                camera.position.x = 0;
                camera.position.y = 1000;
                camera.position.z = 0;
                camera.up.x = 0;
                camera.up.y = 0;
                camera.up.z = 1;
                camera.lookAt({
                    x : 0,
                    y : 0,
                    z : 0
                });
            }

            var scene;
            function initScene() {
                scene = new THREE.Scene();
            }

            var light;
            function initLight() {
                light = new THREE.DirectionalLight(0xFF0000, 1.0, 0);
                light.position.set(100, 100, 200);
                scene.add(light);
            }

            var cube;
            function initObject() {

                var geometry = new THREE.CubeGeometry(100,100,100);
                var material = new THREE.MeshBasicMaterial({color: 0x00ff00});
                var cube = new THREE.Mesh(geometry, material); 
                scene.add(cube);
                console.log("1111");
                
            }


            function threeStart() {
                initThree(); //初始化Three.js渲染器等初始操作
                initCamera(); //初始化相机
                initScene(); //初始化场景
                initLight(); //初始化灯光
                initControls(); //初始化控制器
                initObject(); //初始化渲染物体
                render(); //执行渲染
            }

            function initControls(){
                // 设置相机控件轨道控制器OrbitControls
                const controls = new THREE.OrbitControls(camera, renderer.domElement);
                // 如果OrbitControls改变了相机参数,重新调用渲染器渲染三维场景
                controls.addEventListener('change', function () {
                    renderer.render(scene, camera); //执行渲染操作
                });//监听鼠标、键盘事件
            }
            

            function render() {
                renderer.render(scene, camera);
                requestAnimationFrame(render);
            }
        

            

        </script>
    </head>

    <body onload="threeStart();">
        <div id="webgl"></div>
    </body>
</html>

在这里插入图片描述

视频演示地址:https://www.bilibili.com/video/BV1AXmKYUEFP/?vd_source=0f4eae2845bd3b24b877e4586ffda69a


http://www.kler.cn/news/359621.html

相关文章:

  • 微软运用欺骗性策略大规模打击网络钓鱼活动
  • 【自用】做完项目怎么使用git仓库进行代码的管理/上传/下载
  • 爬虫学习——26.JS逆向(2)
  • 安装配置sqoop(超详细)
  • 【RabbitMQ】RabbitMQ 的七种工作模式介绍
  • python+大数据+基于Spark的共享单车数据存储系统【内含源码+文档+部署教程】
  • 常见加密算法
  • .net framework 3.5sp1组件如何启动?
  • 口电气设备:认证这道坎,如何跨越才能通全球?
  • 漏洞挖掘JS构造新手向
  • 植物大战僵尸杂交版游戏分享
  • 极简版Java敏感词检测SDK
  • 预置持久化应用或者常驻应用会导致自升级不了android:persistent=”true”属性
  • openKylin系统SSH服务配置结合cpolar轻松实现开放麒麟远程连接
  • flutter assets配置加载本地图片报错
  • 提高团队执行力的五大策略
  • Ansible for Windows hosts(ansible.windows 模块介绍)
  • HiveOnSpark环境下,Spark 挂了问题排查思路
  • linux:NAPI
  • AnaTraf | 深入探讨DNS流量分析:保障网络稳定性的关键