Threejs三要素及demo

news2024/9/20 6:00:19

本文目录

  • 前言
  • 一、threejs三要素
    • 1.1 场景Scene
    • 1.2 相机Camera
    • 1.3 渲染器Renderer
    • 1.4 项目构建准备
  • 二、安装Threejs
    • 2.1 编写代码

前言

Three.js是一个在 MIT 许可下的 JavaScript 库,它在 WebGL 之上运行。这个库的目标就是简化处理3D内容的过程。它是一个WebGL引擎(WebGL 是一种 JavaScript API,它可以在画布中呈现三角形,而且速度非常快,因为它使用访问者的图形处理单元 (GPU)。原生 WebGL 非常困难,因为你需要手动写很多代码。但是 Three.js 消除了这个障碍,让你可以轻松创建3D场景。),基于JavaScript,可直接运行GPU驱动游戏与图形驱动应用于浏览器。其库提供的特性与API以绘制3D场景于浏览器。

一、threejs三要素

场景Scene、相机Camera、渲染器Renderer

1.1 场景Scene

场景Scene类似于一个容器或者说世界,它用于存放所有需要放在3维中存在的对象。

1.2 相机Camera

相机Camera用来决定我们观察场景的角度和位置,相机被用来模拟人眼对场景的观察,在 Three.js 中,相机本身是不可见的,它仅用于计算和确定场景中物体的位置和角度。在Three.js中,我们可以拥有多个相机,但通常情况下只需要一个。相机在Three.js中类似于一个锥形体,它受到视野范围和纵横比的影响。

1.3 渲染器Renderer

渲染器它的工作是将我们的代码与设计渲染到我们的web中。在threejs中,我们通常使用 WebGLRenderer 类来进行渲染。WebGLRenderer的一个伟大之处在于它提供了丰富的功能,例如对材质、灯光、阴影和反射的支持。这使得我们能够创建出更加逼真的场景和模型,从而提高用户体验。

1.4 项目构建准备


这步如果你电脑已正常有nodeyarn环境可以跳过 (跳过开始)
首先默认你电脑已经安装了nodeyarn,没有安装的可自行安装。
如果你的电脑安装了volta你使用了volta安装的yarn那么可能会引起报错:

➤ YN0027: vite@unknown can't be resolved to a satisfying range
➤ YN0081: Unsafe http requests must be explicitly whitelisted in your configuration (registry.npm.taobao.org)
➤ Errors happened when preparing the environment required to run this command.

那么请删除此yarn,输入命令where yarn
在这里插入图片描述
那么请把这个yarn删除。
如果你是mac系统,可以使用brew install yarn
在这里插入图片描述
输入命令就可以看到:
在这里插入图片描述

(跳过结束)


接下来我们在终端中使用命令yarn init -y接着再运行命令yarn add -D vite安装前端构建工具vite
在这里插入图片描述
在这里插入图片描述
安装完成。

二、安装Threejs

运行命令yarn add three
在这里插入图片描述

2.1 编写代码

创建01threejs.html写入代码:

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        html,
        body {
            margin: 0;
            padding: 0;
            width: 100%;
            height: 100%;
            overflow: hidden;
        }
    </style>
</head>

<body>
    <script type="module">
        import * as THREE from "three";
        // 创建场景
        const scene = new THREE.Scene();

        // 创建相机
        const camera = new THREE.PerspectiveCamera( // 透视相机
            45, // 视角 角度数
            window.innerWidth / window.innerHeight, // 宽高比 占据屏幕
            0.1, // 近平面(相机最近能看到物体)
            1000, // 远平面(相机最远能看到物体)
        )

        // 创建渲染器
        const renderer = new THREE.WebGLRenderer();
        // 设置渲染器宽高
        renderer.setSize(window.innerWidth, window.innerHeight);
        // renderer(渲染器)的dom元素添加到我们的HTML文档中
        document.body.appendChild(renderer.domElement)
        // new THREE.BoxGeometry 创建一个立方体
        const geometry = new THREE.BoxGeometry(1, 1, 1);
        // 设置基础材质,颜色色值为十六进制
        const material = new THREE.MeshBasicMaterial({ color: 0x00ff00 });
        // 设置Mesh(网格),网格包含一个几何体以及作用在此几何体上的材质
        const cube = new THREE.Mesh(geometry, material);
        // 将网格对象放入到我们的场景中
        scene.add(cube);

        // 默认情况下,当我们调用scene.add()的时候,
        //物体将会被添加到(0,0,0)坐标。但将使得摄像
        //机和立方体彼此在一起。为了防止这种情况的发生,
        //我们只需要将摄像机稍微向外移动一些即可。
        camera.position.z = 5;

        // 渲染循环动画
        function animate() {
            // 在这里我们创建了一个使渲染器能够在每次屏幕刷新时对场景进行绘制的循环(在大多数屏幕上,刷新率一般是60次/秒)
            requestAnimationFrame(animate);

            cube.rotation.x += 0.01;
            cube.rotation.y += 0.01;

            renderer.render(scene, camera);
        };

        // 执行动画
        animate();
    </script>
</body>

</html>

运行命令yarn dev,可以看到:
请添加图片描述

那么我们使用代码可以用以下三种方式改变背景颜色:

        scene.background = new THREE.Color(0x003400);
        scene.background = new THREE.Color("rgb(200, 150, 11)");
        scene.background = new THREE.Color("hsl(35, 90%, 31%)");

在这里插入图片描述

还可以通过图片来进行贴图背景:

        const loader = new THREE.TextureLoader();
        loader.load('../images/cute.png', function(texture) {
            scene.background = texture;
            // 这是异步的,因为下面已经在不停播放动画,所以这边没加这行代码也能生效
            // 如果每天不停播放动画那就要加上这行才会生效
            // renderer.render(scene, camera);
        });

可以看到:
在这里插入图片描述

在学习的路上,如果你觉得本文对你有所帮助的话,那就请关注点赞评论三连吧,谢谢,你的肯定是我写博的另一个支持。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2076927.html

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

相关文章

【Linux】第一次使用linux向gitee上提交代码

1.首先要在gitee上新建一个仓库 2.然后&#xff0c;复制https的仓库链接 3. 三板斧 第一斧 git add . 4.三板斧 第二斧 git commit -m ‘日志’ 5.三板斧 第三斧 git push

QQ官方BOT 机器人Python实现群聊本地图片【base64编码】上传及其发送

参考&#xff1a;实现群聊本地图片【base64编码】上传及其发送 by SlieFamily 拉取请求 #199 腾讯连接/Botpy (github.com) 首先找到api.py&#xff0c;如果你是通过pip安装的botpy。找到包对应的地址&#xff0c;如果是clone的&#xff0c;也直接找到api.py。 打开后&#xff…

io进程----文件io

目录 一丶概念 二丶特点 三丶函数 1.打开文件 open 2.关闭文件 close 3.读取文件 read 4.写入文件 write 5.文件定位操作 标准IO和文件IO区别 四丶获取文件属性 1.stat函数 2.获取文件类型 五丶目录操作 一丶概念 在posix(可移植操作系统接口)中定义的一组输入输出…

STC89C52 定时器浅谈

文章目录 1、定时器1.1 定时器简介1.2 定时器构成1.2.1 系统时钟1.2.2 计数单元1.2.3 中断系统 1.2 定时器0/1的相关寄存器1.2.1 TMOD1.2.2 TCON 1.3 初始化定时器0 1、定时器 1.1 定时器简介 定时器&#xff0c;又称为计数器&#xff0c;是51单片机的内部资源&#xff0c;即…

16、CPU缓存架构

CPU缓存架构 CPU缓存架构详解CPU高速缓存概念CPU多核缓存架构CPU多核缓存架构缓存一致性问题分析 CPU缓存架构缓存一致性的解决方案缓存一致性协议实现原理总线窥探工作原理窥探协议类型 缓存一致性协议MESI协议 伪共享的问题linux下查看Cache Line大小避免伪共享方案 CPU缓存架…

netty编程之实现HTTP服务

写在前面 http是应用层协议&#xff0c;是我们日常开发中直接用到最多的协议了。本文来看下通过netty如何实现。 1&#xff1a;程序 netty不仅仅提供了String相关的编解码器&#xff0c;还贴心的提供了http相关的编码器和解码器&#xff0c;直接拿来用就行了&#xff0c;所以…

【3.3】贪心算法-解分发糖果

一、题目 老师想给孩子们分发糖果&#xff0c;有N 个孩子站成了一条直线&#xff0c;老师会根据每个孩子的表现&#xff0c;预先给他们评分。 你需要按照以下要求&#xff0c;帮助老师给这些孩子分发糖果&#xff1a; 1&#xff09;每个孩子至少分配到1 个糖果。 2&#xff…

apache经典模型和nginx参数配置

Apache 几个经典的 Web 服务端 ①Apache prefork 模型 ● 预派生模式&#xff0c;有一个主控制进程&#xff0c;然后生成多个子进程&#xff0c;使用select模型&#xff0c;最大并发 1024 ● 每个子进程有一个独立的线程响应用户请求 ● 相对比较占用内存&#xf…

Cyberchef实用功能之-模拟沙箱的文件静态分析能力

本文将介绍如何使用cyberchef 提取文件的重要元数据的信息&#xff0c;根据自己的需求实现沙箱中的静态文件的分析能力。 在网络安全日常的运营&#xff0c;护网行动&#xff0c;重保活动的过程中&#xff0c;样本的分析是一个重要的过程&#xff0c;这些可疑或者恶意的样本的…

Beyond Compare忽略特定格式文本

1 问题背景&#xff1a; 文本对比时忽略某些文本。比如有些生成的文件需要做差异对比&#xff0c;除了内容有差异外&#xff0c;自动生成的ID也不同&#xff0c;想忽略这些ID。特别是文件内容比较多的时候。 如上图&#xff0c;其中UUID“*”的部分我想忽略。 方法&#xff1…

微信开放平台应用签名MD5

可以使用JS转换一下 一、在任一网页 右键 检查 打开调试 二、把字母转换成小写&#xff0c;去除&#xff08;:&#xff09; MD5 应用签名示例 "70:71:5F:CA:AE:E5:B1:01:30:11:8F".toLowerCase().replace(/:/g, "") 70715fcaaee5b10130118f 就是要填写…

我们为什么推出数据模型

调用接口之前&#xff0c;要写大量的字段校验代码&#xff1f; 需要关联读写多张表的数据&#xff0c;难以写出复杂的数据库语法&#xff1f; 不仅需要开发核心的业务逻辑&#xff0c;还需要加班搭建CMS和数据管理页面&#xff1f; 数据不止放在云开发&#xff0c;还需要查询…

ctfhub-web-基础认证

HTTP协议&#xff1a;什么是HTTP基本认证_网易订阅 https://zhuanlan.zhihu.com/p/64584734 弹框输入密码账号bp抓包&#xff0c;发现了Authorization&#xff1a;后面有一串BASE64的编码(输入的密码) 账号默认是admin&#xff0c;抓包后是basic 把抓到的包发送到爆破模块i…

MySql【约束】

约束 1.1 约束 是什么? 约束,即限制,就是通过设置约束,可以限制对数据表数据的插入,删除,更新 怎么做? 约束设置的语法,大部分是 create table 表名( 字段 数据类型(长度) 约束, 字段 数据类型(长度) 约束 ); 另外一种是建表后,使用alter语句修改表添加约束 1.1 数据类型 其实…

人社大赛算法赛题解题思路分享+第五名

关联比赛: [国家社保]全国社会保险大数据应用创新大赛 赛题背景分析及理解 本次比赛&#xff0c;“精准社保”的赛题为“基本医疗保险医疗服务智能监控”&#xff0c;由参赛队完成数据算法模型的开发设计&#xff0c;实现对各类医疗保险基金欺诈违规行为的准确识别。 在进行了…

AI工业ros机械臂

1、基本介绍 该产品是一款面向于人工智能、机器人工程等专业的实验平台&#xff0c;能够学习基于人工智能技术的智能机器臂相关知识。主要由工业六轴机械臂、机械臂控制器、边缘计算主机、安全防护工作台四部分构成。该产品可完成的课程&#xff1a;机器视觉、机器人操作系统RO…

Stable Diffusion 使用详解(10)--- 场景立体字

目录 背景 复刻立体雏形 Lora 模型 参数设置与controlnet 出图效果 融入图片 提取 合成 背景 虽然都是字&#xff0c;带场景的立体字和上一节讲的做法不太一样。一般来说&#xff0c;一般这种带字体的场景字现阶段都是Lora模型居多&#xff0c;Lora 属于轻量级模型&…

linux系统中USB模块基本原理分析

大家好,今天主要给大家分享一下,USB设备的发展历程。 第一:USB发展变化 随着时代的发展,USB模块也随之不断的升级。 USB1.1:规范了USB低全速传输; USB2.0:规范了USB高速传输,采用NRZI(反向不归零)编码(NRZI采用8bit编码方式),位填充(在数据进行NRZI编码前…

每日一练-threejs实现三维动态热力图

前言&#xff1a;学习自用Three.js搞个炫酷热力山丘图&#xff0c;作者讲解的十分详细&#xff0c;在这里不再过多赘述&#xff0c;直接上代码&#xff01; <template><div class"map" ref"map"></div> </template><script set…

亿发工单管理系统助力五金行业智造升级:高效生产新篇章

在五金制造行业&#xff0c;效率和质量决定了企业的竞争力。五金厂通过引入先进的工单管理系统&#xff0c;成功实现了从传统制造向智能制造的转型。今天&#xff0c;我们将带您深入了解这场变革背后的力量&#xff0c;揭示工单管理系统如何在五金工厂的各个环节中发挥重要作用…