位置: 编程技术 - 正文

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入门教程)

  • 赊销和分销时纳税义务发生时间是什么时候?
  • 应收账款贷方余额怎么调平
  • 冲回多提的坏账准备分录为
  • 疫情期间公司买水
  • 上年少计提工会经费本年怎么调整
  • 计提工资是包含社保吗
  • 发票第一联需要盖章嘛
  • 增值税专用发票有效期是多长时间
  • 中外合资经营企业的经营期限
  • 收入未确认可以结转成本吗
  • 抵扣发票未申报
  • 赠送样品视同销售增值税该怎么做账务处理呢?
  • 收到赔偿怎么做账
  • 税号开错了
  • 工资分两次发的风险是什么?
  • 三证合一怎么查询
  • 专用发票的清单要开2张吗
  • 商品流通企业批发销售会计分录
  • 固定资产加速折旧最新政策2023
  • 17%和6%的票能直接抵扣吗?
  • 增值税附加税怎么计提
  • 小规模税率还是1%吗
  • 自然人股权转让要交什么税
  • 税收征收管理权是什么
  • 高新企业认定 研发委外费用
  • win10系统还原了怎么恢复
  • 个税是什么意思必须交吗
  • 个人福利需要缴纳个税吗
  • 个人与公司交易超过20万
  • openlayers加载geojson
  • macos使用方法
  • 计提个体户经营所得税
  • 赔付支出有哪些
  • 企业破产时的退出机制
  • php大于等于号怎么打
  • axios请求设置超时时间
  • 多申报缴纳的企业年金
  • 人工智能agi
  • javascript获取数组索引
  • 小规模纳税人免增值税的账务处理
  • JS初识
  • c语言中有哪些循环结构
  • 纳税人在工作
  • 2020年防洪基金计算公式
  • 盈余公积转增会计分录
  • 如何测试php
  • 员工的生日津贴怎么发
  • 算税负是含税还是不含税
  • sql server2005备份
  • sql2000管理工具
  • 保修期间免费提车可以吗
  • 企业收到个体户的普通发票还需要缴纳20%的税吗
  • 折价购买股权账务处理
  • 编制现金流量表应以什么为基础
  • 增值税相关的问题
  • 专项附加扣除项目
  • Mysql 5.6.37 winx64安装双版本mysql笔记记录
  • winxp 移动硬盘
  • xp系统开机后什么都没有,怎么办
  • 构建dockerfile
  • xp开机提示explorer
  • osx怎么用
  • 虚拟内存扩大有什么好处
  • shell下同时读取多个文件的方法
  • nomoreporn.exe - nomoreporn是什么进程 有什么用
  • win8系统怎么关机
  • opengl learn
  • Unity3d OnApplicationPause与OnApplicationFocus 判断游戏暂停还是重新启动
  • PyCharm在win10的64位系统安装实例
  • 3行程序搞定SVM分类-用JAVA程序调用LibSVM API 最简单的示例
  • 批量压缩命令
  • 安卓 aac
  • Linux 中的通配符详解及实例
  • 怎么连接w乚an
  • 安卓小项目实战软件
  • 安徽省国家税务局电子税务局
  • 苏州公积金密码怎么改
  • 山东地域分布
  • 深圳市地方税务局历任局长
  • 全国税务稽查会议
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设