three.js零基础入门超全超细的教程整理(一)

事情是这样的: 有一天 我干完活 看技术文章 发现了three.js 诶!这玩应挺有意思 盘盘
于是第一天找教程 上官网 初上手
第二天 找案例 渲模型 试VR
第三天 捋文档 然后来活了 没时间捋了

下面是集百家精华教程的整理总结 涉及到教程方面有加源作者和地址

超详细的教程:http://www.webgl3d.cn/Three.js/ (作者:郭隆邦)
官网地址: https://threejs.org/
下载又慢又卡可以从github上直接下载到本地启动
three.js官方资源地址:https://github.com/mrdoob/three.js/

(我这实在太卡了 后来找的别人分享的百度网盘 下载的three.js官方案例 也挺大的 里头有很多案例 模型 文档等)
在这里插入图片描述
目录结构

  • docs:里头是官方API文档
  • editor:官方带的可视化编辑器(我还没试过这个)
  • examples:官网案例
  • src:three源码
  • utils:辅助工具

cnpm install npm run dev启动项目后 index.html里右击 open with live server

在这里插入图片描述
three.js运行需要启动本地的服务器。所以我们在VSCode上整个Live Server插件
Live Server插件可以自动监听 快速启动本地服务 不用手动刷新就能更新内容
在这里插入图片描述
官网的案例
在这里插入图片描述
docs文档:
在这里插入图片描述
editor目录:
在这里插入图片描述
editor 基于web的编辑器 可以在浏览器里创建 编辑 导出three.js场景和模型


**什么是three.js :**前端3D框架 ( 绘制3D的js轻量级框架 采用HTML5 Canvas提供硬件3D加速渲染)
**应用场景:**VR模型、地图、家装,机房、厂房等

第一个demo

参照教程:https://juejin.cn/post/7263846857407103032?searchId=2024022810311654D9F40D801D3B5376B1
(作者:chonglingliu)

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><title>Three.js入门</title></head><body>    <!-- <script type="importmap">{"imports": {"three": "./build/three.module.js","OrbitControls": "./OrbitControls.js","GLTFLoader": "./GLTFLoader.js",}}</script> --><script src="./script.js" type="module"></script><div id="container"></div>
</body>
</html> 

script.js (顺序可能不合理 但效果能出来)
这里不知道啥原因 引入three.js官方案例里的…/…/examples/jsm/controls/OrbitControls.js 控制台 总是报错

Uncaught TypeError: Failed to resolve module specifier “three/addons/controls/OrbitControls.js”. Relative references must start with either “/”, “./”, or “…/”.

搜也搜不出来 后来没招了 引的cdn地址 好歹是可以用了

import * as THREE from '../../build/three.module.js';window.THREE = THREE;// 1. 引入图片// import floor from "./images/floor_wood.jpg";// import { OrbitControls } from '../../examples/jsm/controls/OrbitControls.js'// import * as THREE from 'https://threejsfundamentals.org/threejs/resources/threejs/r122/build/three.module.js';import {OrbitControls} from 'https://threejsfundamentals.org/threejs/resources/threejs/r122/examples/jsm/controls/OrbitControls.js';// 1. 创建渲染器,指定渲染的分辨率和尺寸,然后添加到body中const renderer = new THREE.WebGLRenderer({ antialias: true });renderer.pixelRatio = window.devicePixelRatio;renderer.setSize(window.innerWidth, window.innerHeight);document.body.append(renderer.domElement);// 2. 创建场景const scene = new THREE.Scene();// 3. 创建相机const camera = new THREE.PerspectiveCamera(75,window.innerWidth / window.innerHeight,0.1,1000);camera.position.set(5, 5, 10);camera.lookAt(0, 0, 0);// 4. 创建物体const axis = new THREE.AxesHelper(5);scene.add(axis);// 添加立方体// const geometry = new THREE.BoxGeometry(4, 4, 4);// const material = new THREE.MeshBasicMaterial({ color: 0xff0000 });// 1.// const material = new THREE.MeshStandardMaterial({ color: 0xff0000 });// 2. 初始化纹理加载器const textloader = new THREE.TextureLoader();const ambientLight = new THREE.AmbientLight(0xffffff, 0.4);scene.add(ambientLight);// 3.const directionalLight = new THREE.DirectionalLight(0xffffff, 1);directionalLight.position.set(10, 10, 10)scene.add(directionalLight);const geometry = new THREE.BoxGeometry(4, 4, 4);const material = [new THREE.MeshBasicMaterial({map: textloader.load('./images/657.jpg')}),new THREE.MeshBasicMaterial({map: textloader.load('./images/657.jpg')}),new THREE.MeshBasicMaterial({map: textloader.load('./images/657.jpg')}),new THREE.MeshBasicMaterial({map: textloader.load('./images/657.jpg')}),new THREE.MeshBasicMaterial({map: textloader.load('./images/657.jpg')}),new THREE.MeshBasicMaterial({map: textloader.load('./images/657.jpg')}),];const cube = new THREE.Mesh(geometry, material);// const cube = new THREE.Mesh(geometry, material);scene.add(cube);// 1. 渲染器能够渲染阴影效果renderer.shadowMap.enabled = true;// 2. 该方向会投射阴影效果directionalLight.castShadow = true;cube.castShadow = true;// 4. const planeGeometry = new THREE.PlaneGeometry(20, 20);// const planeMaterial = new THREE.MeshStandardMaterial({ color: 0xffffff });// 3. 给地板加载纹理const planeMaterial = new THREE.MeshStandardMaterial({map: textloader.load('./images/floor_wood.jpg')})const planeMesh = new THREE.Mesh(planeGeometry, planeMaterial);planeMesh.rotation.x = -0.5 * Math.PI;planeMesh.position.set(0, -3, 0);planeMesh.receiveShadow = true;scene.add(planeMesh);// 5. 方向光的辅助线const directionalLightHelper = new THREE.DirectionalLightHelper(directionalLight);scene.add(directionalLightHelper); // 辅助线cube.rotation.y = Math.PI / 4;// function animate() {//     requestAnimationFrame(animate);//     cube.rotation.y += 0.01;//     renderer.render(scene, camera);//   }const controls = new OrbitControls(camera, renderer.domElement);controls.update();const clock = new THREE.Clock();function animate() {requestAnimationFrame(animate);const elapsedTime = clock.getElapsedTime(); // 返回已经过去的时间, 以秒为单位//   cube.rotation.y = elapsedTime * Math.PI; // 两秒自转一圈cube.rotation.y = elapsedTime * 1; // 两秒自转一圈renderer.render(scene, camera);}animate() // // 5. 渲染// renderer.render(scene, camera);

在这里插入图片描述
这抽巴巴的丑字 哈哈哈 因为我不写出来 只用眼睛看不过脑子记不住

1.创建 3D场景对象 Scene
2.创建 网格模型对象
3.光源设置
4.透视 投影 相机对象设置
5.创建渲染器对象

场景 Scene
几何体 Geometries
材质 Materials
物体 Objects
相机 Cameras
渲染器 Renderers

Threejs中的几个重要概念
在使用threejs之前,要先了解threejs中的几个重要概念,分别是场景(Scenes)、几何体(Geometries)、材质(Materials)、物体(Objects)、相机(Cameras)和渲染器(Renderers)
1.Scenes:场景的概念原本是戏剧、电影中的概念,指的是某一个特定的场面;threejs中的场景其实就是一个特定的场面,想象一下,假如你是导演,要拍一个火车进站的镜头,这就是一个场景

2.Geometries:几何体就是立体图形,如正方体、球、圆等图形;在场景中就相当于一个道具的外形结构;threejs中提供了很多几何体,如立方体(BoxGeometry)、圆(CircleGeometry)、圆锥(ConeGeometry)等,具体可查看threejs的官方文档

3.Materials:材质顾名思义就是物体的材料质感,比如颜色、透明度等,在场景中就相当于道具的颜色和材料,threejs中也提供了很多材质类接口,比如基础网格材质(MeshBasicMaterial)等,老规矩,具体的内容还是查看threejs的官方文档

4.Objects:物体也称对象,物体就是客观存在的一种物质,一个物体包括两方面的特性,即它的形状和材质。threejs中物体由Geometries和Materials两部分组成,这就相当于电影中的道具枪一样,它由外形结构(几何体)和材料颜色(材质)组成。

5.Cameras:相机就相当于电影中用于拍摄的摄像机,相机拍摄的角度、远近场景的切换等由其控制。

6.Renderers:渲染器相当于电影的后期合成,我场景有了,物体也准备好了,相机拍摄完成了,就需要用渲染器把拍摄的东西通过合成展现出来。上面这段 没找着出处


我这里只是一个总结整理 感谢出教程的各位大佬
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

前端用Scss简化媒体查询

1、演示 2、未优化前的代码 .header {width: 100px;height: 100px;background-color: red; } media (min-width: 320px) and (max-width: 480px) {.header {width: 10px;} } media (min-width: 320px) and (max-width: 480px) {.header {height: 20px;} } media (min-width: 48…

如何做接口测试呢?接口测试有哪些工具!

回想入职测试已经10年时间了&#xff0c;初入职场的我对于接口测试茫然不知。后来因为业务需要&#xff0c;开始慢慢接触接口测试。从最开始使用工具进行接口测试到编写代码实现接口自动化&#xff0c;到最后的测试平台开发。回想这一路走来感触颇深&#xff0c;因此为了避免打…

期货量化交易软件:模式搜索的暴力方法(第六部分)循环优化

概述 考虑到我上一篇文章中的材料&#xff0c;我赫兹量化软件可以说这只是我在算法中引入的所有函数的肤浅描述。它们不仅涉及EA创建的完全自动化&#xff0c;还涉及诸如结果优化和选择的完全自动化以及随后用于自动交易&#xff0c;或者我赫兹量化稍后将展示的更先进的EA的创…

Vscode 中调试Django程序

调试介绍: ​​​​​​​Explore the debugger Debug/调试 可以让我们在特定的代码行上暂停程序的运行。当程序暂停时&#xff0c;我们可以查看变量的数值&#xff0c;在“Debug控制台”中运行代码&#xff0c;或利用“Debug”工具提供的其他功能。启动Debugger/调试器会自动…

LeetCode-热题100:138. 随机链表的复制

题目描述 给你一个长度为 n 的链表&#xff0c;每个节点包含一个额外增加的随机指针 random &#xff0c;该指针可以指向链表中的任何节点或空节点。 构造这个链表的 深拷贝。 深拷贝应该正好由 n 个 全新 节点组成&#xff0c;其中每个新节点的值都设为其对应的原节点的值。…

Golang——方法

一. 方法定义 Golang方法总是绑定对象的实例&#xff0c;并隐式将实例作为第一实参。 只能为当前包内命名类型定义方法参数receiver可以任意命名。如方法中未曾使用&#xff0c;可省略参数名参数receiver类型可以是T或*T。基类型T不能是接口或指针类型(即多级指针)不支持方法重…

【随笔】Git 高级篇 -- 相对引用2 HEAD~n(十三)

&#x1f48c; 所属专栏&#xff1a;【Git】 &#x1f600; 作  者&#xff1a;我是夜阑的狗&#x1f436; &#x1f680; 个人简介&#xff1a;一个正在努力学技术的CV工程师&#xff0c;专注基础和实战分享 &#xff0c;欢迎咨询&#xff01; &#x1f496; 欢迎大…

【算法详解】二分查找

1. 二分查找算法介绍 「二分查找算法&#xff08;Binary Search Algorithm&#xff09;」&#xff1a;也叫做 「折半查找算法」、「对数查找算法」。是一种在有序数组中查找某一特定元素的搜索算法。 基本算法思想&#xff1a;先确定待查找元素所在的区间范围&#xff0c;在逐步…

ROS通信机制---服务通信

2.2服务通信 2.2.1服务通信理论模型 2.2.2服务通信自定义srv 后续调用相关msg时&#xff0c;是从这些中间文件调用的 2.2.3服务通信自定义srv调用A&#xff08;c&#xff09; 1.服务端 2.客户端 实现参数的动态提交 问题&#xff1a;如果先启动客户端&#xff0c;那么会请求异…

避雷!网络安全学习五大误区,你还不知道?

尽管安全问题老生常谈&#xff0c;但一些普遍存在的误区仍然可能让企业随时陷入危险境地。 为了有效应对当前层出不穷且不断变换的网络威胁&#xff0c;最大程度规避潜在风险&#xff0c;深入了解网络安全的发展趋势必不可少。即使部署了最新且最先进的硬件和解决方案并严格遵守…

技能鉴定试题及答案,分享几个实用搜题和学习工具 #其他#职场发展

市面上搜题软件不少&#xff0c;大部分都挺好用的&#xff0c;今天小编在这里给大家分享几个好用的搜题工具&#xff0c;都拥有丰富的题库资源&#xff1b;而且搜题功能也都很完善&#xff0c;手机端、网页端均有&#xff0c;有需要的小伙伴赶紧码住&#xff01; 1.千鸟搜题 …

配置VM开机自启动

1. 在此电脑-右键选择“管理”-服务和应用程序-服务中找到VMware Workstation Server服务&#xff08;新版名称也可能是VMware自启动服务&#xff0c;自己找一下&#xff0c;服务属性里有描述信息的&#xff09;&#xff0c;将其启用并选择开机自动启动 新版参考官方文档&…