网站首页 > 技术文章 正文
three.js和webGL
引用官方的说法:
three.js是使用WebGL来绘制三维效果的,three.js封装了诸如场景、灯光、阴影、材质、贴图、空间运算等一系列功能,让你不必要再从底层WebGL开始写起。
所以学习three.js并不需要专门去学习webGL,当然有基础肯定是有帮助的。
官网说明
1.打开官网看到下图,右边是一些3d样例,对初学没什么用。
左边r130代表的版本号,这边建议大家去看的是文档说明(documentation)和resources的第一个学习资源(Three.js Fundamentals),他们都有对应的中文翻译,讲得比较基础适合入门
three.js版本选择
1) three.js版本更新得很快,今天你下载了一个新版本,明天可能又更新了。很多旧版的方法在新版中被删除,一些方法的引用文件也有所改变,在网上搜索到的很多教程都是r6-r9版本,方法的使用看起来也是各异,学习起来挺混乱的。这里我使用r130版本(编写这边文章时候的最新版本)。各版本官方下载地址:
https://github.com/mrdoob/three.js/tags 。
2) 下载完之后解压得到three.js-master文件夹。这边将build里面的three.js拿出来,在自己项目做练习,examples里面有各种样例的代码包括了素材和对应的js依赖,之后可以拿来做练习(毕竟3d素材自己不好弄)。
开发工具
我使用的vscode ,安装live Server插件,可以跑本地服务,解决了图片等素材引用的跨域问题,当然你也可以直接使用官方的脚手架来练习。官方脚手架需要node环境,如果不了解的建议使用vscode。
五.第一个3d程序
这里我使用官网上的例子。先上全代码,附注释。可以运行下看效果。
<html>
<head>
<meta charset="utf-8">
<title>My first three.js app</title>
<style>
body {
margin: 0;
padding:0;
}
</style>
</head>
<body>
<script src="js/three.js"></script>
<script>
const scene = new THREE.Scene();
const camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000);
const renderer = new THREE.WebGLRenderer();
renderer.setSize(window.innerWidth, window.innerHeight);
document.body.appendChild(renderer.domElement);
const geometry = new THREE.BoxGeometry();
const material = new THREE.MeshBasicMaterial({
color: 0x00ff00
});
const cube = new THREE.Mesh(geometry, material);
scene.add(cube);
camera.position.z = 5;
const animate = function () {
requestAnimationFrame(animate);
cube.rotation.x += 0.01;
cube.rotation.y += 0.01;
renderer.render(scene, camera);
};
animate();
</script>
</body>
</html>
1.创建了一个场景,也就是3d模型等展示的舞台。
const scene = new THREE.Scene();
2.创建一个相机,他拍到的地方就是我们看到的内容,这里创建的是透视相
第一个参数:是角度表示看到的范围,
第二个表示:长宽比,作用是展示的物体可以正常比例显示
三四参数表示:近截面(near)和远截面(far),当物体某些部分比摄像机的远截面远或者比近截面近的时候,该这些部分将不会被渲染到场景中。
const camera = new THREE.PerspectiveCamera(50, window.innerWidth / window.innerHeight, 0.1, 1000)
3.创建一个渲染器,将场景和相机放入,渲染画面,设置渲染范围,并添加到页面中
const renderer = new THREE.WebGLRenderer();
renderer.setSize(window.innerWidth, window.innerHeight);
document.body.appendChild(renderer.domElement);
4.创建简单的3d模型
// 创建一个正方体
const geometry = new THREE.BoxGeometry();
// 创建网格基础材质 可以理解为外表样子,材质有很多种,详细可以查文档
const material = new THREE.MeshBasicMaterial({
color: 0x00ff00
});
// 创建网格 将他们加入网格中在添加到场景,网格包含一个几何体以及作用在此几何体上的材质
const cube = new THREE.Mesh(geometry, material);
scene.add(cube);
5.渲染
// 这边是将相机拉远了,便于观察。如下图所示
camera.position.z = 5;
// 添加动画,渲染
const animate = function () {
requestAnimationFrame( animate );
cube.rotation.x += 0.01;
cube.rotation.y += 0.01;
renderer.render( scene, camera );
};
animate();
6.效果图
- 上一篇: 判断变量是否为数组
- 下一篇: vue下载excel文件方法
猜你喜欢
- 2025-08-03 一起学 pixijs(4):如何绘制文字
- 2025-08-03 csdn免录可复制实现当前页面生成二维码链接
- 2025-08-03 前端分享-少年了解过iframe么
- 2025-08-03 收好这个提示词!让DeepSeek帮我们生成精美网页表格!
- 2025-08-03 前端录屏黑科技:几行 JS 代码就能实现!
- 2025-08-03 Fragment :从基本原理到深度解析
- 2025-08-03 浅谈JavaScript中Blob对象
- 2025-08-03 救命!这10个Vue3技巧藏太深了!性能翻倍+摸鱼神器全揭秘
- 2025-08-03 浏览器点击链接打开指定APP是如何实现的?
- 2025-08-03 数组长度检查竟然这么慢!用这行代码解决
- 08-06中等生如何学好初二数学函数篇
- 08-06C#构造函数
- 08-06初中数学:一次函数学习要点和方法
- 08-06仓颉编程语言基础-数据类型—结构类型
- 08-06C++实现委托机制
- 08-06初中VS高中三角函数:从"固定镜头"到"360°全景",数学视野升级
- 08-06一文讲透PLC中Static和Temp变量的区别
- 08-06类三剑客:一招修改所有对象!类方法与静态方法的核心区别!
- 最近发表
- 标签列表
-
- cmd/c (90)
- c++中::是什么意思 (84)
- 标签用于 (71)
- 主键只能有一个吗 (77)
- c#console.writeline不显示 (95)
- pythoncase语句 (88)
- es6includes (74)
- sqlset (76)
- windowsscripthost (69)
- apt-getinstall-y (100)
- node_modules怎么生成 (87)
- chromepost (71)
- flexdirection (73)
- c++int转char (80)
- mysqlany_value (79)
- static函数和普通函数 (84)
- el-date-picker开始日期早于结束日期 (70)
- asynccallback (71)
- localstorage.removeitem (74)
- vector线程安全吗 (70)
- java (73)
- js数组插入 (83)
- mac安装java (72)
- 查看mysql是否启动 (70)
- 无效的列索引 (74)