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

news2024/10/16 21:41:49

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.coloradmin.cn/o/2216567.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

深度解析计数排序:原理、特性与应用

目录 &#x1f4af;引言 &#x1f4af;计数排序的原理 ⭐核心概念 ⭐工作流程 1.确定计数范围 2.统计元素出现次数 3.计算累计计数 4.放置元素到正确位置 &#x1f4af;计数排序的实现 ⭐代码示例&#xff08;以 C 为例&#xff09; ⭐时间复杂度分析 ⭐稳定性分析…

【在Linux世界中追寻伟大的One Piece】Jsoncpp|序列化

目录 1 -> Jsoncpp 1.1 -> 特性 1.2 -> 安装 2 -> 序列化 3 -> 反序列化 4 -> Json::Value 1 -> Jsoncpp Jsoncpp是一个用于处理JSON数据的C库。它提供了将JSON数据序列化为字符串以及从字符串反序列化为C数据结构的功能。Jsoncpp是开源的&#xf…

CSS选择器及背景属性介绍

1.复合选择器 &#xff08;1&#xff09;后代选择器 &#xff08;2&#xff09;子代选择器 &#xff08;3&#xff09;并集选择器 &#xff08;4&#xff09;交集选择器 2.伪类选择器 即鼠标所悬停的内容变色 扩展&#xff1a;伪类选择器关于超链接 3.CSS三大特性 &#xff…

路由表来源(基于华为模拟器eNSP)

概叙 在交换网络中&#xff0c;若要实现不同网段之间的通信&#xff0c;需要依靠三层设备&#xff08;路由器、三层交换机等&#xff09;&#xff0c;而路由器只知道其直连网段的路由条目&#xff0c;对于非直连的网段&#xff0c;在默认情况下&#xff0c;路由器是不可达的&a…

心理咨询评估|基于springBoot的学生心理咨询评估系统设计与实现(附项目源码+论文+数据库)

私信或留言即免费送开题报告和任务书&#xff08;可指定任意题目&#xff09; 目录 一、摘要 二、相关技术 三、系统设计 四、数据库设计 五、核心代码 六、论文参考 七、源码获取 一、摘要 使用旧方法对学生心理咨询评估信息进行系统化管理已经不再让人们信…

Metasploit渗透测试之社会工程学工具SET

概述 社会工程师工具包&#xff08;SET&#xff09;是一个开源渗透测试框架&#xff0c;专门设计用于对人为因素执行高级攻击&#xff0c;并迅速成为渗透测试人员武器库中的标准工具。SET是TrustedSec&#xff0c;LLC的产品&#xff0c;TrustedSec&#xff0c;LLC是一家位于俄…

深入理解Qt中的QTableView、Model与Delegate机制

文章目录 显示效果QTableViewModel(模型)Delegate(委托)ITEM控件主函数调用项目下载在Qt中,视图(View)、模型(Model)和委托(Delegate)机制是一种非常强大的架构,它们实现了MVC(模型-视图-控制器)设计模式。这种架构分离了数据存储(模型)、数据展示(视图)和数据操作(委托),使…

安装指定node.js 版本 精简版流程

首先 我们本机上是否安装有node 如果有 需要先卸载 卸载完成后 使用命令查看是否卸载干净 打开WinR 输入cmd 然后输入如下名: where node 如果没有目录显示 说明node 很干净 本机没有相关安装 在输入命令: where npm 如果有相关目录 需要删除掉 要不然 后续安装的…

阿里云数据库导出 | 数据管理(兼容数据库备份)

文章目录 1、数据库导出2、操作步骤3、DMS - Data Management Service 1、数据库导出 2、操作步骤 3、DMS - Data Management Service

MySQL 【日期】函数大全(五)

目录 1、QUARTER() 返回一个指定日期所在季度值。 2、SEC_TO_TIME() 将指定的秒数转为一个格式为 HH:MM:SS 的时间值。 3、SECOND() 提取并返回时间的秒部分。 4、STR_TO_DATE() 将指定的字符串根据指定日期格式转为日期/时间。 5、SUBDATE() 在指定的日期/时间上减去指定…

127-4通道 12bit 125Msps 直流耦合 AD FMC 子卡

一、板卡概述: FMC 高速 AD 模块 FL9627 为 4 路 125MSPS&#xff0c; 12 位的模拟信号转数字信号模块。 FMC 模块的 AD 转换采用了 2 片 ADI 公司的 AD9627 芯片&#xff0c;每个 AD9627 芯片支持 2 路 AD 输入转换&#xff0c;所以 2 片 AD9627 芯片一共支持 4 路的 AD 输入…

FLORR.IO回顾

No.1 subulaxi No.2 qwert 2青加全红 我将在2024.11.1退游!

Wails 学习笔记:Wails核心思想理解

文章目录 1. Wails 的核心思想2. 工作流程2.1 前端渲染2.2 后端逻辑2.3 前后端通信2.4 应用打包与分发 3. Wails 主要组件3.1 WebView3.2 事件与数据绑定3.3 窗口管理 4. Wails 的优点5. Wails 的使用场景6. 启动函数Runwails.Run() 的主要功能wails.Run() 的参数&#xff1a;w…

MySQL8.0.28解压版安装windows

1.下载 https://mirrors.aliyun.com/mysql/MySQL-8.0/mysql-8.0.28-winx64.zip 2.文档 MySQL :: MySQL 8.0 Reference Manual :: 2.3.4 Installing MySQL on Microsoft Windows Using a noinstall ZIP Archive 3.创建配置文件my.ini。默认解压文件中没有 内容如下&#xff…

【LangChain系列1】【LangChain表达式 (LCEL)】

目录 前言一、LangChain1-1、介绍1-2、LangChain抽象出来的核心模块1-3、特点1-4、langchain解决的一些行业痛点1-5、安装 二、LangChain表达式——LCEL2-1、LCEL介绍2-2、基本示例&#xff1a;提示 模型 输出解析器2-3、接口 附录、ZhiPuAI API0、安装1、设置API密钥2、基本…

无法获得下列许可 SolidWorks standard。无法连接到服务器(-15,10,10061)

太久没启动SolidWorks&#xff0c;今天想打开&#xff0c;结果给我报错&#xff0c;如下图所示&#xff1a; 看网上说是开机启动项被杀毒软件给关了&#xff0c;于是打开360&#xff0c;看了一下&#xff0c;果然&#xff1a; 还有好几个和SolidWorks相关的项目&#xff0c;这里…

WebRTC音频 04 - 关键类

WebRTC音频01 - 设备管理 WebRTC音频 02 - Windows平台设备管理 WebRTC音频 03 - 实时通信框架 WebRTC音频 04 - 关键类(本文) 一、前言&#xff1a; 在WebRTC音频代码阅读过程中&#xff0c;我们发现有很多关键的类比较抽象&#xff0c;搞不清楚会导致代码阅读一脸懵逼。比如…

吴恩达深度学习笔记(5)

调试处理&#xff08;随机采样、非格网、由粗到细&#xff09;及超参数 深度学习中涉及大量超参数&#xff0c;如下所示 在不知道哪个参数更为重要的情况下&#xff0c;机器学习参数较少&#xff0c;可以利用网络化的参数取值试验&#xff0c;但是深度学习参数较多的情况下&am…

通过华为鲲鹏认证的软件产品如何助力信创产业

软件通过华为鲲鹏认证与信创产业有着密切的联系。鲲鹏认证是华为推动信创产业发展的一项重要举措&#xff0c;通过该认证&#xff0c;软件可以在华为的生态系统中实现更好的兼容性和性能优化&#xff0c;从而推动信创产业的全面发展和国产化替代。 鲲鹏认证的定义和重要性 鲲鹏…