位置: 编程技术 - 正文

THREE.JS入门教程(1)THREE.JS使用前了解(three.js入门教程(合集))

编辑:rootadmin
Three.js是一个伟大的开源WebGL库,WebGL允许JavaScript操作GPU,在浏览器端实现真正意义的3D。但是目前这项技术还处在发展阶段,资料极为匮乏,爱好者学习基本要通过Demo源码和Three.js本身的源码来学习。 国外网站 aerotwist.com 有六篇较为简单的入门教程,我尝试着将其翻译过来,与大家分享。 我在一些实验项目中使用了Three.js,我发现它对快速上手浏览器3D编程确实很有帮助。通过Three.js,你不仅可以创建相机、物体、光线、材质等等,还可以选择着色器,可以决定使用何种技术(WebGL、Canvas或SVG)在网页上渲染你的3D图形。Three.js是开源的,你甚至可以参与到这个项目中来。但现在,我将把重点放在基础的介绍上,我将向你展示如何使用这个引擎上。 尽管Three.js如此奇妙,但有时候它也会令人抓狂。比如,你将花费大量时间阅读例程,做一些逆向工程(在我的情形下)来确定某个函数的作用,有时还要去GitHub上提问。如果你需要提问,Mr. doob和AlteredQualia是极好的选择。 1.基础 我假定你的三维图形学知识过关,而且也在一定程度上掌握了JavaScript。如果不是这样,那先去学一点吧,否则直接看这篇教程,也许会感到困惑。在我们的三维世界里,我们有以下这些东西。我会带你一步一步创建它们。 1.场景 2.渲染器 3.相机 4.物体(带有材质的) 当然,你也可以创造些其他的什么东西,我也希望你如此做。 2.浏览器支持 简单地看一下浏览器的支持情况吧。Google家的Chrome浏览器支持Three.js,在我的实验里,无论是对渲染器的支持程度还是JavaScript解释器的运行速度,Chrome都是做得最好的:它支持Canvas、WebGL和SVG,而且运行得非常快。FireFox浏览器排在第二位,它的JavaScript引擎的速度比Chrome慢了半拍,但是对渲染器的支持也很棒,而且FireFox的速度,随着版本更新也越来越快。Opera浏览器正在逐渐增加对WebGL的支持,Mac上的Safari浏览器有一个开启WebGL的选项。总体上,这两个浏览器仅仅支持Canvas渲染。微软家的IE9现在只支持Canvas渲染,而且微软似乎并不乐意支持WebGL这个新特性,所以我们现在肯定不会用IE9来做实验。 3.设置场景 假定你已经选择了一个支持所有渲染技术的浏览器,而且你准备通过Canvas或WebGL来渲染场景(这是更标准化的选择)。Canvas比WebGL有着更广泛地支持,但是WebGL可以直接在GPU上操作,这意味着你的CPU可以专注地处理非渲染类的工作,比如物理引擎或与用户交互等。无论你选择何种渲染器,你都必须牢记在心的是:JavaScript代码需要优化。三维显示对浏览器来说不是一项轻松的工作(现在能够这样做就很伟大了),所以如果你的渲染太慢了,你需要知道你代码的瓶颈在何处,如果可能,改善它。说了这么多,我想你已经下载好Three.js源代码,而且将它引入了你的html文档了。那么如何开始创建一个场景呢?就像这样: 你看,简单吧! 4.构建网格表面 现在我们有了一个场景,一个相机和一个渲染器(在我的例子里,当然是一个WebGL渲染器),但我们事实上什么还没画呢。事实上,Three.js提供了载入某几种标准格式3D文件的支持,如果你在Blender,Maya,Cinema4D或是什么其他工具中建模,这简直太棒了。为了简单(毕竟这才刚开始呢!)我们先来考虑基元。基元就是基本的几何表面,比如最基本的球体、平面、立方体、圆柱体。利用Three.js可以很方便地创建这些基元: 好了,但是球体上的材质呢?在代码中我们使用了一个sphereMaterial变量,我们还没定义它呢。那我们就先来看看怎么创建材质吧。 5.材质 毫无疑问,这是Three.js最有用的部分了。这部分提供了几个非常易用的通用材质模型: 1.Basic材质:表示一种不考虑光照的材质,现在只能这么说了。 2.Lambert材质:(译者注:朗伯面,各向同性反射)。 3.Phong材质:(译者注:冯氏面,有光泽的表面,介于镜面反射和朗伯反射之间的反射,描述真实世界的反射)。除此之外,还有一些其他类型材质,简单起见,就留给你自己探索。事实上,在使用WebGL类型的渲染器时,材质实在太好用了。为什么呢?因为在原生WebGL种你必须亲自为每个渲染编写着色器,而着色器本身就是个巨大的工程:简单地说着色器是使用GLSL语言(OpenGL的着色器语言)写的,用来操作GPU的程序,这意味着你要在数学上模拟光照,反射等等,这很快就变成一项极为复杂的工作。多亏有了Three.js你才可以不必去自己编写着色器,当然,如果你想亲自编写的话,你可以使用MeshShaderMaterial,可见这是很灵活的设定。现在,让我们用朗伯面材质覆盖球体: 值得指出的是,创建材质的时候,除了颜色还有很多其他参数可以指定,比如光滑度和环境贴图。你可以需要检索这个Wiki页面来确认哪些是哪些属性可以设置在材质上,或Three.js引擎提供的任何对象上。 6.光 如果你现在就想渲染场景,你会看到一个红色的圆。虽然我们在球体上覆盖了朗伯面材质,但场景里没有光。所以按照默认设定,Three.js会恢复到满环境光,物体的看上去的颜色就是物体表面的颜色。让我们添加一个简单的点光源: 7.渲染循环 显然,关于渲染器的一切都设置好了。万事俱备,我们现在只需要: 你很可能像多次渲染,而不是只渲染一次,所以如果你要去做一个循环,你应该使用requestAnimationFrame。这是目前最好的,在浏览器中处理动画的方法,虽然还没有得到最全面的支持,但我强烈建议你去看一看Paul Irish的博客。 8.通用的对象属性 如果你花点时间去浏览一遍Three.js的源代码,你会发现很多对象都继承自Object3D。这个基类包含了很多有用的属性,比如位置、旋转和缩放的信息。特别的,我们的球体是一个Mesh对象,而Mesh对象继承自Object3D对象,但是又增加了些自己的属性:geometry和material。为什么要说这些?因为你一定不会只满足于屏幕中一个什么都不做的圆球,而这些(译者注:基类中的)属性允许你操作Mesh对象更底层的细节和各种各样的材质。 9.讨厌的秘密 我希望这样说你能很快弄明白:就是如果你修改了,比如说,一个mesh对象的顶点属性vertices,你会发现在渲染循环中,什么都没变。为什么?因为Three.js将mesh对象的信息缓存为某种优化结构了。你真正要做的是给Three.js一个标识,告诉它如果什么东西改变了,需要重新计算缓存中的结构: 还有更多的标识,但我发现这两个是最有用的。你应该仅仅标识那些确实需要实时计算的属性来避免无谓的运算开销。 .小结 我希望这篇简单的介绍对你有所帮助。没什么能比得上卷起袖子亲手实践了,我强烈建议你这样做。在浏览器里面运行3D程序很有意思,而且使用像Three.js这样一个引擎免去了很多麻烦,让你一开始就能专注于那些真正cool的事情。我将这篇教程的源码打包了,你可以下载下来作为一份参考。

推荐整理分享THREE.JS入门教程(1)THREE.JS使用前了解(three.js入门教程(合集)),希望有所帮助,仅作参考,欢迎阅读内容。

THREE.JS入门教程(1)THREE.JS使用前了解(three.js入门教程(合集))

文章相关热门搜索词:three.js 教程,threejs入门教程,threejs入门教程,three.js bim,three.js中文教程,threejs入门教程,three.js入门指南,threejs入门教程,内容如对您有帮助,希望把文章链接给更多的朋友!

THREE.JS入门教程(2)着色器-上 译序Three.js是一个伟大的开源WebGL库,WebGL允许JavaScript操作GPU,在浏览器端实现真正意义的3D。但是目前这项技术还处在发展阶段,资料极为匮乏,爱好

THREE.JS入门教程(3)着色器-下 译序Three.js是一个伟大的开源WebGL库,WebGL允许JavaScript操作GPU,在浏览器端实现真正意义的3D。但是目前这项技术还处在发展阶段,资料极为匮乏,爱好

THREE.JS入门教程(4)创建粒子系统 译序Three.js是一个伟大的开源WebGL库,WebGL允许JavaScript操作GPU,在浏览器端实现真正意义的3D。但是目前这项技术还处在发展阶段,资料极为匮乏,爱好

标签: three.js入门教程(合集)

本文链接地址:https://www.jiuchutong.com/biancheng/379139.html 转载请保留说明!

上一篇:JS键盘的键码(event.keyCode)图片版(js 键盘码)

下一篇:THREE.JS入门教程(2)着色器-上(threejs入门教程)

  • 提前报废的设备
  • 使用增值税发票的条件
  • 运输企业内账
  • 应付职工薪酬在资产负债表怎么填
  • 公司全部股权转让流程
  • 增值税加计扣除政策
  • 个人购买商业保险怎么抵扣个税
  • 增值税专用发票抵扣税额是什么意思
  • 个人所得税筹划节税
  • 购进出口商品的会计分录
  • 消费税的应纳税额的计算
  • 税局代开专票对方隔月退回重开如何做账务处理呢?
  • 未开票确认收入分录怎么做
  • 多出来的费用
  • 关于半年度净资产的公告
  • 小规模收到货运专用发票
  • 咨询费收入交什么税种
  • 房地产企业开发资质等级
  • 融资租入的固定资产视为承租企业的资产体现了什么原则
  • 外包劳务费用如何计算
  • 计提房租的原始凭证包括
  • 账面价值和账面成本的区别
  • 退回的发票怎么处理
  • 收到生育津贴的短信是真的吗
  • 金蝶系统怎么修改库存数量
  • 房租押金未全额缴纳
  • 腾讯云centos5.8
  • 两个公司的资金怎么合并
  • 鸿蒙系统如何隐藏文件
  • 携税宝的作用
  • 个税手续费反还
  • 不动产经营租赁范围
  • msqry32.exe进程是什么文件 作用是什么 msqry32进程查询
  • laravel with查询指定字段
  • 哈士奇新手礼包
  • gpu版本的pytorch
  • pytorch nn.parameters
  • 预付采购材料款60000元
  • 帝国cms手机模板是什么
  • 个体工商户可以给自己交社保吗
  • 增值税专票不认证后果
  • 收到法院款项如何做账
  • 预收账款可以通过什么科目核算
  • 营业税改增值税是什么意思
  • 外购货物用于公益性捐赠
  • 购买商品并入库做什么会计分录
  • 公司制作横幅计入什么科目?
  • 个税申报错误已经扣税款怎么处理
  • 跨年收入退款如何处理
  • 哪些项目的进项不含税
  • 应交增值税减免税额在借方
  • 无形资产当年提摊销嘛
  • 公司内部核算调研报告
  • 年度纳税总额包括个税吗
  • 残疾人就业保障金征收使用管理办法
  • 财政专用存款账户
  • 分类不同
  • mysql爆破字典
  • ubuntu20.04软件安装
  • 没有系统盘怎么修复系统
  • ubuntu21.04中文
  • ubuntu20.04亮度调节
  • win10系统资源
  • 怎样修改mac
  • os x10.8.5
  • windows8.1关机在哪
  • 教程:如何在Win10 PC上玩Pokémon Go游戏
  • 一键配置天赋的台词
  • 同一内容复制到多个单元格
  • node.js常用命令
  • python 异步操作
  • javascript怎么弄
  • python灰度变换
  • 请问在javascript程序中
  • python生成随机数据
  • JavaScript获取网页内容
  • 简述javascript的主要特点
  • fragment生命周期图
  • 设备租赁增值税怎么抵扣
  • 北京车船税新标准
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设