Three.js 初阶入门篇(一)

news2024/11/24 14:28:20

系列文章目录


文章目录

  • 系列文章目录
  • 学习背景
  • 一、什么是3D(直接看作品吧)?
    • 汽车作品欣赏
      • 鼠标可以随意转动角度
      • 打开机盖(交互效果)
      • 尾部
      • 3D链接🔗如下(链接打开会有一些慢)
  • 二、如何创建一个3d的旋转立方体
    • 1.准备Threejs库(创建js文件)
    • 2.如何创建旋转立方体,步骤如下
      • 第一步:引入three.js的类库
      • 第二步:创建【场景,相机,渲染器】
        • PerspectiveCamera的用法解释如下:
        • 渲染器的解释如下:
        • 代码如下:
      • 第三步:创建立方体的【几何形状,面的样式,存贮的网格】
        • 解释网格的意义
        • 代码如下:
      • 第四步:设置一个动画效果(此处的rotate一定要添加才会旋转)
        • 解释为什么需要动画
      • 不添加网格的偏移量,结果如下图所示:
        • 代码如下
  • 总结


学习背景

今天在翻对应的一些图标库的时候发现,选来WebGL可以做一些身临其境的3D效果,感到尤为的震撼。在此之前,我对webGL只是停留在,听别人讲的内容上,等我打开了Threejs的官网,看完里面的一些案例的时候,我发现,这些大概是我稀罕的技术。

快来学习了,快来学习了,3D真的很酷!!!!!!

一、什么是3D(直接看作品吧)?

汽车作品欣赏

看完这种项目,是不是感觉很牛逼!!!!!!!!!

鼠标可以随意转动角度

在这里插入图片描述

打开机盖(交互效果)

在这里插入图片描述

尾部

在这里插入图片描述

3D链接🔗如下(链接打开会有一些慢)

3d汽车欣赏

二、如何创建一个3d的旋转立方体

1.准备Threejs库(创建js文件)

threejs库地址

2.如何创建旋转立方体,步骤如下

第一步:引入three.js的类库

<!-- 第一步,引入three.js -->
<script src="./three/index.js"></script>

第二步:创建【场景,相机,渲染器】

PerspectiveCamera的用法解释如下:

PerspectiveCamera(参数1,参数2,参数3) 第一个参数:视野角度,第二个参数:长宽比,第三四个参数,近截面和远截面

渲染器的解释如下:

第一点 :我们可以将渲染器宽高设置为浏览器窗口宽高。例如window.innerWidth/2和window.innerHeight/2,
第二点:如果你希望保持你的应用程序的尺寸,但是以较低的分辨率来渲染,你可以在调用setSize时,将updateStyle(第三个参数)设为false。

代码如下:

    //1.创建场景
    const scene = new THREE.Scene()
    
    //2.创建相机 
    const camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000)
    
    //3.渲染器(可以在不同的浏览器中进行降级适配)
    const renderer = new THREE.WebGLRenderer()
   //设置一个渲染器的尺寸(渲染的是整个浏览器) 
   renderer.setSize(window.innerWidth/2,window.innerHeight/2,false) 
   //4.将渲染器添加到页面上
   document.body.appendChild(renderer.domElement) 

第三步:创建立方体的【几何形状,面的样式,存贮的网格】

解释网格的意义

网格包含一个几何体以及作用在此几何体上的材质, 我们可以直接将网格对象放入到我们的场景中, 并让它在场景中自由移动。

代码如下:

    //5.创建一个立方体
    const geometry = new THREE.BoxGeometry(1,1,1) //BoxGeometry 主要是创建了一个几何体(骨架)

    const material =new THREE.MeshBasicMaterial({color:'#FFFFFF'}) //MeshBasicMaterial 主要是给面添加样式

    //创建一个网格去展示 骨架+面 的组合
    const cube = new THREE.Mesh(geometry,material)
     
    //6.将网格上的立方体添加到场景上
    scene.add(cube)
    camera.position.z=2  //这一步是为了调整立方体在页面上距离(必须加)

第四步:设置一个动画效果(此处的rotate一定要添加才会旋转)

解释为什么需要动画

现在,如果将之前写好的代码复制到HTML文件中,你不会在页面中看到任何东西。这是因为我们还没有对它进行真正的渲染。为此,我们需要使用一个被叫做“渲染循环”(render loop)或者“动画循环”

不添加网格的偏移量,结果如下图所示:

在这里插入图片描述

代码如下

//8.设置网格循环一次的偏移位置(此处不添加偏移量,只能得到一个平面图形)
    function rotate(){
        cube.rotation.x+=0.01
        cube.rotation.y+=0.01
    }
    //7.展示立方体
    function animate(){
        requestAnimationFrame(animate)
        rotate()
        renderer.render(scene,camera)
    }

    animate()

总结

提示:这里对文章进行总结:今天是第一次接触Three.js,还是感觉3D是一项很酷炫的技术!!!!

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

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

相关文章

零入门容器云网络实战-7->Mac环境下为虚拟机磁盘空间进行扩容

在Mac环境下&#xff0c;使用PD软件创建的虚拟机磁盘空间不够时&#xff0c;如何扩容呢&#xff1f; 主要分两大步骤&#xff1a; 先通过PD界面&#xff0c;设置增加多少空间进入虚拟机里&#xff0c;通过fdisk等相关命令&#xff0c;使其增加的空间生效 1、第一大步&#xf…

机器学习之线性模型

定义 线性模型非常常见&#xff0c;但详细了解其中原理是必要的。 一般将样本特征进行线性组合达到预测的目标&#xff0c;如表达式yf(X;W)byf(X;W)byf(X;W)b,其中XXX为输入的样本数据&#xff0c;WWW为权重系数&#xff0c;bbb为偏置系数。 如对于图片样本&#xff0c;一种…

兔年春晚一大怪像,影视演员变成了万能,专业歌手却被晾在一边

怪事年年有&#xff0c;今年特别多。谁也没有想到&#xff0c;兔年春节还没有过去&#xff0c;就出现了一种奇怪的现象。中央电视台春晚&#xff0c;曾经执全国春晚之牛耳&#xff0c;然而谁能想到&#xff0c;四十多年后的今天&#xff0c;曾经的扛把子却变成了鸡肋。 今年央视…

【C++初阶】七、STL---vector(总)|vector的介绍|vector的使用

目录 一、vector的介绍 二、vector的使用 2.1 Construct 2.2 operator 2.3 Iterators 2.4 Capacity 2.5 Element access 2.6 Modifiers 一、vector的介绍 前面学习了 string类&#xff0c;所以 vector 的学习成本很低&#xff0c;因为接口都大致相同&#xff0c;功能也…

【促进开发】上海道宁与DHTMLX为您提供易于使用且功能丰富的JavaScript组件

DHTMLX提供 有效且专业设计的 JavaScript/HTML5工具 使开发人员 能够以更少的时间和精力 创建具有丰富界面和快速性能的 复杂Web和移动应用程序 DHTMLX使用 JavaScript UI 库促进开发 易于使用且功能丰富的 JavaScript组件 非常适合您在任何领域和 任何复杂性中的解…

SpringCloud微服务项目实战 - 7.kafka及文章上下架

一步一步地苦熬苦掖&#xff0c;终于我们也看见了花团锦簇&#xff0c;我们也知道了彩灯佳话。那一夜&#xff0c;我也曾梦见百万雄兵。 系列文章目录 项目搭建App登录及网关App文章自媒体平台&#xff08;博主后台&#xff09;内容审核(自动)延迟任务 文章目录系列文章目录一…

并查集应用

一、并查集模板 int find(int x) {if(p[x]!x) p[x]find(p[x]);return p[x]; }并查集高效率的核心是一旦更新过一次后&#xff0c;就会将路径压缩掉&#xff0c;避免后续重复遍历路径。 二、并查集应用 1、格子游戏 分析&#xff1a;每构成一个方框&#xff0c;当最后两个点连…

RA4M2开发(2)----基于IIC驱动OLED

概述 在e2studio中创建新的工程并导入必要的文件&#xff0c;包括I2C驱动代码和SSD1306 OLED显示驱动代码。配置RA4M2的I2C接口&#xff0c;使其作为I2C master进行通信。初始化SSD1306 OLED显示驱动代码&#xff0c;并配置显示屏的物理地址和分辨率。通过I2C驱动代码将数据写…

【Linux】初识环境变量

文章目录环境变量引入初见环境变量和环境变量有关的指令如何通过代码获取环境变量getenv()main函数的命令行参数第三方变量environ程序变量可以继承给子进程环境变量引入 Linux中有各种指令&#xff0c; 每个指令其实都是一个可执行程序&#xff1a; 和我们自己写的C语言代码…

API自动化测试【postman生成报告】

PostMan生成测试报告有两种&#xff1a; 1、控制台的模式 2、HTML的测试报告 使用到一个工具newman Node.js是前端的一个组件&#xff0c;主要可以使用它来开发异步的程序。 一、控制台的模式 1、安装node.js 双击node.js进行安装&#xff0c;安装成功后在控制台输入node…

Ansys Zemax | 多模光纤耦合

本文展示了利用几何图像分析特性来计算多模光纤耦合效率的方法。 还有使用IMAE操作数优化多模光纤耦合效率的方法。该方法只适用于包含大量模式的多模光纤。 下载 联系工作人员获取附件 简介 我们可以使用OpticStudio中的几何图像分析&#xff08;Geometric Image Analysi…

已解决error: legacy-instal1-failure

已解决&#xff08;pip install wxPython安装失败&#xff09;error: legacy-instal1-failure Encountered error while trying to install package.wxPython note: This is an issue with the package mentioned above&#xff0c;not pip. hint : See above for output from …

ChatGPT 回答什么是敏捷测试

Jenkins 官方文档&#xff1a;https://jenkins.io/doc/JUnit 插件文档&#xff1a;JUnit | Jenkins pluginTestNG 插件文档&#xff1a;https://plugins.jenkins.io/testng-plugin/Jenkins 教程&#xff1a;https://jenkins.io/doc/tutorials/JUnit 教程&#xff1a;JUnit 5 Us…

舆情监测软件报价方案,TOOM舆情监控软件多少钱?

舆情监测软件的价格因公司不同而有所差异&#xff0c;通常在几百元至数千元不等。价格还可能受到功能复杂度、数据量、使用时长等因素的影响。建议您联系多家软件开发商或销售代表&#xff0c;对比各家的产品和报价&#xff0c;以找到适合您需求和预算的解决方案。舆情监测软件…

算法训练营DAY46|139.单词拆分、多重背包的介绍

这一期到了背包问题的最后一期&#xff0c;主要讲解一道leetcodee题&#xff0c;和对多重背包的一些简单介绍&#xff0c;由于leetcode没有对于多重背包的具体问题&#xff0c;且面试基本不会问到多重背包所以只是作为科普。 139. 单词拆分 - 力扣&#xff08;LeetCode&#x…

缺省参数,函数重载,引用的使用(C++)

前言 本文主要讲解的是缺省参数&#xff0c;函数重载&#xff0c;引用的使用. 文章目录 目录 前言 一、缺省参数是什么&#xff1f; 1.缺省参数的分类 二、函数重载是什么&#xff1f; 三、引用是什么&#xff1f; 1.引用特性 总结 提示&#xff1a;以下是本篇文章正文内容&am…

java中的NIO,BIO,AIO

IO&#xff0c;input和output&#xff0c;Java 为 I/O 提供了强大的而灵活的支持&#xff0c;使其更广泛地应用到文件传输和网络编程中。 IO是什么&#xff1f;为什么需要IO&#xff1f; java在1.4之前&#xff0c;提供的是BIO&#xff0c;也就是java.io包下的的东西&#xf…

SpringBoot(二):配置文件的作用、配置文件的格式、properties配置文件、yml配置文件

目录一、配置文件的作用二、配置文件的格式三、properties配置文件3.1 properties的基本语法3.2 properties的缺点3.3 配置自定义内容3.4 读取配置文件四、yml配置文件4.1 yml基本介绍4.2 yml基本语法4.3 使用yml配置不同的数据类型4.4 读取yml配置文件4.5 在yml中配置对象4.6 …

关于UWB汽车钥匙介绍

汽车钥匙经历了机械钥匙、遥控钥匙、PEPS、数字钥匙四个阶段&#xff0c;而数字钥匙又分为BLE/NFC/UWB三种技术路线。由于UWB安全性、定位精度、作用范围明显好于BLE和NFC&#xff0c;因此成为汽车数字钥匙的最优技术。PEPS与数字钥匙PEPS是指无钥匙进入/无钥匙启动系统&#x…

MySQL详解(三)——高级 1.0

MySQL高级 utf8只支持每个字符最多三个字节&#xff0c;而真正的 UTF-8 是每个字符最多四个字节 MySQL 的这个bug一直没有被修复&#xff0c;他们在 2010 年发布了一个叫作“utf8mb4”的字符集&#xff0c;绕过了这个问题。 MySQL优点 Mysql是开源的Mysql是可以定制的&…