位置: 编程技术 - 正文

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

  • 可以公账户给私账转账吗
  • 金税四期有什么优势
  • 加计扣除和研发费不一致
  • 公务员工资待遇标准表
  • 商誉减值可以抵税吗
  • 公司代扣社保为什么是400多余的钱
  • 施工企业暂估成本税前扣除
  • 契税的计税金额是什么
  • 购买展示样品怎么入账
  • 零退税率可以做免税吗
  • 国税发200931号文件解读
  • 所得税除以利润总额是稳定性评价指标吗
  • 应收账款融资的会计如何核算
  • 研发费水电费比例怎么分配
  • 进口增值税发票怎么认证
  • 结转出租设备的会计分录
  • 贸易公司买进卖出
  • 民间非盈利组织会计要素组成
  • 对公账户信息补录
  • 应交税金减免税款
  • 企业若需要给客户交税
  • php symlink
  • 取得土地使用权的方式
  • 营业外收支的内容
  • 代扣代缴个人所得税手续费返还 增值税
  • 米尔福德试车场
  • php打包网站并在哪里打开
  • HBuilderX uni-app简单实现静态登录页面(实例)
  • 火山口湖成因
  • thinkphp6项目
  • 一点分享案例
  • php连接redis集群
  • php7.4配置
  • 不需要支付的应付款情况说明
  • 云服务器可以一直开着吗
  • 会计审核费用报销单的职责
  • 所得税减免与纳税的区别
  • 申报财务报表利润怎么写
  • 发票金额与实际不符
  • python一元二次方程求根
  • sql语句优化实例
  • 原材料卖出去会计分录
  • 企业年金举例说明
  • 实发工资属于什么科目
  • 出租无形资产取得的收益计入什么科目
  • 建筑安装增值税纳税地点
  • Transactional replication(事务复制)详解之如何跳过一个事务
  • 缴纳工会筹备金会计分录怎么写
  • 增值税免税优惠梳理
  • 信用减值损失转回的会计处理
  • 有净残值的固定资产怎么计提折旧
  • 出口确认收入的时间
  • 装饰设计 工程
  • 已付款未收到发票
  • 车船税没发票只交可以吗
  • 公司收到劳务发票交个税吗
  • 招待费可以做成什么科目
  • 会计报表的作用概括起来就是为报表使用者提供会计信息
  • 企业出租商业铺面需要缴纳什么税
  • freebsd 配置ip
  • ubuntu 20.04 服务器
  • dmidecode 硬盘
  • rsmsink.exe - rsmsink是什么进程 有何作用
  • linux各种重定向及其含义
  • win10开启暗黑模式
  • win8系统怎么进入控制面板
  • win8如何安装
  • win10系统的电脑有哪些
  • 利用nodejs实现百度文本审核
  • linux自动清理磁盘空间
  • python解读
  • unity用鼠标控制物体移动
  • 简述javascript的作用
  • jquery插件使用教程
  • android开发范例实战宝典
  • 打造自己的庭院花园游戏
  • jquery div滚动条
  • jQuery 3.0 的 setter和getter 模式详解
  • 无锡税务举报网站
  • 金税三期个税下载官网手机版
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设