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


图片素材
在这里插入图片描述
在这里插入图片描述


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

  • 22
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 如果你想开始学习three.js,可以从教程源代码入手。教程源码提供了一些示例和实例,可以启发你的创作灵感,也可以让你更快地理解three.js的基础知识。 在查看源码之前,你需要先安装three.js和web开发环境。安装完成后,你就可以开始查看源码了。 教程源码一般会有一些说明和注释,这些注释可以帮助你更好地理解代码的功能和实现方法。你可以先阅读这些注释,然后尝试运行代码,看代码是如何运作的。 当你理解了一些基础的代码后,你可以尝试自己写一些小程序,练习three.js的使用。这些小程序可能简单,但是可以帮助你加深对three.js的理解,并为今后更复杂的项目做好准备。 最重要的是,遇到问题不要担心,可以参考three.js社区和文档,也可以在网上寻找相关的教程和视频。通过不断摸索和学习,你一定能掌握three.js的使用技巧,创作出自己喜欢的作品。 ### 回答2: three.js是一个能够在网页上实现3D图形和动画效果的JavaScript库,可以用于创建各种有趣的3D场景和游戏。针对初学者,有很多的入门教程和示例代码可供学习和练习。 在网上搜索“three.js入门教程源代码”可以找到很多优秀的教程和示例代码,如three.js官方文档、CodePen、Github等。此外,同类的OpenGL和WebGL等技术也有很多优秀的资源可供参考。 对于初学者来说,建议先了解three.js的基本知识,如坐标系、场景、相机、灯光、材质、几何体等等。然后可以通过实践来加深理解,例如创建一个简单的立方体、平面、球体等。同时也可以尝试调整相机、灯光和材质等参数,看看会发生什么变化。 在学习过程中,遇到问题可以查阅文档或者在相关社区寻求帮助。同时也要多注重实践,通过参考示例代码和自己实践来提升技能。 ### 回答3: three.js是一个非常流行的JavaScript 3D图形库,很多人想要学习它,但是对于初学者来说,这可能会让他们感到非常困难。因此,一些网站和博客提供了一些入门教程以帮助初学者了解并开始使用three.js,其中一些包括源代码。 这些源代码提供一些基础教学,帮助用户通过编写一些简单的three.js代码并观察结果来学习three.js的基础知识。 用户可以下载源代码,并使用它们在自己的计算机上运行三维场景。 这些源代码通常提供了许多有关three.js的基础知识,包括: 1. 创建场景,灯光和相机。 2. 从文件中加载3D模型和纹理。 3. 使用材质和纹理来渲染对象。 4. 添加动画和控制器。 5. 处理鼠标和键盘输入。 6. 在网页上嵌入three.js场景。 这些源代码通常以注释的形式提供,说明每个代码块的功能。此外,这些源代码通常遵循良好的编程实践,使读者易于理解和跟踪整个过程。 总的来说,three.js零基础入门教程源代码非常适合那些想要学习three.js的初学者,他们可以通过这些源代码快速入门,并了解更多three.js知识。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值