位置: 编程技术 - 正文

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

编辑:rootadmin
译序 Three.js是一个伟大的开源WebGL库,WebGL允许JavaScript操作GPU,在浏览器端实现真正意义的3D。但是目前这项技术还处在发展阶段,资料极为匮乏,爱好者学习基本要通过Demo源码和Three.js本身的源码来学习。 0.简介 之前我已经给出了一篇《开始使用Three.js》。如果你还没有读过,你可能需要去读一下,本文的基础是在那一篇教程的基础上完成的。 我想讨论一下着色器。在Three.js帮助你免去了很多麻烦之前,原生WebGL就很优秀了。有的时候,你也许会想要完成一些特定的效果,或者想对呈现在你的屏幕上的东西钻研得更深入一些,那么着色器一定会进入你的视野。如果你像我一样,你也同样希望实现一些比上一篇教程中的基础更加有意思的东西。这篇教程中,我会讲解Three.js的基础,这些基础实际上为我们做了很多枯燥的工作。 在开始之前我还要说,这篇教程会有相当多的篇幅在解释着色器的代码,之后会有一篇教程会在着色器代码的基础上前进一点,利用着色器去做点什么。这是因为着色器shaders第一眼看上去并不易懂,需要一些解释。 1.两种着色器 WebGL没有固定的渲染管线,你无法直接使用一个黑盒子式的着色器(译者注:上个世纪的显卡基本都只支持固定渲染管线);WebGL提供的是可编程的管线,这种方式更强大但也更难理解和使用。长话短说,可编程渲染管线意味着编写程序的人要自己负责获取顶点并将它绘制在屏幕上了。着色器是渲染管线的一部分,有两种着色器: 1.顶点着色器 2.片元着色器 你应当知道的是,这两种着色器都完全运行在显卡的GPU上,我们将需要它们处理的数据从CPU上卸下,装到GPU上,减轻了CPU的复旦。现代的GPU对着色器需要的调用的运算类型都做了大幅优化,这样做很值得。 2.顶点着色器 基元形状,比如一个球体,是由顶点构成的,是吧?顶点着色器被依次传入这些顶点中的一个顶点,然后处理它。如何处理每个顶点是可以自由定制的,但顶点着色器有一个必做的事,就是为一个名为 gl_Position 的变量赋值,该变量是一个4维数组,表示该顶点最终在屏幕上的位置。这本身是个有意思的过程,因为我们实际上在谈论如何将一个三维坐标(一个具有x、y、z值得顶点)转化为,或者说投影到二维的屏幕上。谢天谢地,要是我们使用Three.js之类的工具,我们能够如此方便地访问到 gl_Position 。 3.片元着色器 现在我们有包含顶点的三维物体了,现在要将物体投影到二维屏幕上了,但颜色哪里去了?纹理和光照呢?这正是片元着色器要处理的。 和顶点着色器类似,片元着色器有一项必须完成的任务:设置或消除变量 gl_FragColor ,另一个四维浮点变量,也就是片元点最终的颜色。什么是片元?想象一个具有三个顶点的三角形,片元就是经过这三个顶点计算后的,所有在三角形内部的点。因此,片元值由顶点的值内插生成。如果一个顶点的颜色是红色,相邻顶点的颜色是蓝色,那么我们可以观测到颜色从红色顶点附近渐变,由红色变成紫色,最终在蓝色顶点附近变成蓝色。 4.着色器变量 说到着色器变量,有三种:Uniforma,Attributes和Varyings。当我第一次听到这三个词语时,我很困惑,因为它们和我之前用到的东西完全不匹配。但现在,你可以这样理解它们: 1.Uniforms变量既可以传入顶点着色器,也可以传入片元着色器,它们包含了哪些在整个渲染过程中保持不变的变量,比如,一个点光源的位置。 2.Attributes变量对应于每个顶点,它们只可以传入顶点着色器中,比如每个顶点都具有一个颜色。Attributes变量和顶点的关系是一一对应的。 3.Varyings变量是在顶点着色器中定义,并且准备传入给片元着色器的变量。为了确保这点,我们需要确保在两个着色器中变量的类型和命名完全一致。一个经典的应用是法线向量,因为在计算光照的时候需要用到法线。 在后面一篇教程中,我会使用这三种变量,你也会学习到这三种变量如何真正应用起来得。 现在,我们已经谈过了顶点着色器、片元着色器和三种着色器变量。是时候来看一个我们可以创建的最简单的着色器了。 5.Hello World(译者吐槽:能不能不要秀法语啊) 这儿有一个最简单的顶点着色器: 一个最简单的片元着色器: 这就是全部了。如果现在直接运行的话,你就可以在屏幕上看到一个“无光”的粉红色形体。不是很复杂,是吗? 在顶点着色器中,我们通过Three.js传入了一些uniforms变量。有两个4×4的矩阵uniforms变量:模型视图矩阵和投影矩阵。你并不需要太了解这两个矩阵是怎么工作的。简单地说,这两个矩阵描述了三维点坐标如何投影成为二维屏幕上的坐标。 事实上,我只介绍了这两段简短的代码段。Three.js在你自己的着色器代码前已经将它们加进来了,所以你不必担心。实话说,Three.js还加了很多东西在你的代码前面,比如光照数据、节点颜色和节点法向量等等。如果没有Three.js你要亲自创建并设置这些对象,真的。 6.使用着色器材质 从这儿开始,Three.js将会编译并运行你的着色器,将其连接在你创建的材质上,材质又依附于你创建的mesh上。它并没有变得比真的更容易。也许是这样吧,但我们在考虑浏览器3D编程,我想你应该预期,这个话题是有一定复杂性的。 我们还可以像着色器材质添加另外两种属性:uniforms和attributes。他们可以是向量、整数或者浮点数,但是如我之前所说,uniforms变量在计算所有点的过程中保持不变,所以它们更加可能是单一的值,而attributes变量是对每个顶点而言的,所以他们应当是数组。在一个mesh中,attribute变量和顶点应当是一一对应的。 7.小结 这篇教程就到这里了,实际上我已经讲得很多了,但是在许多方面我都只是一掠而过。在下一篇教程中我会提供一个复杂的着色器,通过它我将传入一些attributes变量和uniforms变量来做一些模拟光照效果。 我将这篇教程的源码打包了,你可以下载下来作为参考

推荐整理分享THREE.JS入门教程(2)着色器-上(threejs入门教程),希望有所帮助,仅作参考,欢迎阅读内容。

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

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

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

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

THREE.JS入门教程(5)你应当知道的十件事 Three.js是一个伟大的开源WebGL库,WebGL允许JavaScript操作GPU,在浏览器端实现真正意义的3D。但是目前这项技术还处在发展阶段,资料极为匮乏,爱好者学

标签: threejs入门教程

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

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

下一篇:THREE.JS入门教程(3)着色器-下(three.js入门教程(合集))

  • 股东撤资涉及到哪些税如何缴纳?
  • 一般纳税人如何做账报税
  • 个体工商户个人经营所得税优惠政策
  • 计提印花税如何计算
  • 存货是根据总账科目计算填列吗
  • 个体工商户增值税怎么计算
  • 怎么调开票金额
  • 资产负债表中其他流动资产包括哪些科目
  • 货物无偿赠送分录
  • 合伙企业应纳税所得额公式是什么
  • 跨年主营业务成本直接冲回可以吗
  • 利税总额计算公式表
  • 企业收到跨年度的政府补贴款,是否计入当年企业所得税
  • 未计提坏账准备的会计分录
  • 简易征收不动产租赁税率是多少
  • 土地房产税征收范围
  • 小微企业工会经费的减免政策2023
  • 公司为员工需要承担哪些责任
  • 期末未分配利润大于期初未分配利润+期末净利润
  • 企业外购零部件可以入哪个会计科目核算?
  • 污水处理增值税征收品目
  • 企业固定资产清单表格
  • 成本分摊会计
  • mac电脑安装win10系统报错
  • 重装系统j
  • 结转本月收入类账户到本年利润
  • 代理的认定
  • 进程查看工具
  • kazaalite.exe是什么进程 kazaalite进程有什么用
  • laravel auth:api
  • 企业新产品销售收入数据
  • vuecli3创建项目的过程
  • ChatGPT是如何训练得到的?通俗讲解
  • 机器学习--使用朴素贝叶斯进行垃圾邮件分类
  • 应交税金会计编码
  • 为什么增值税申报表保存不了
  • 营业收入为什么不包括营业外收入
  • 利润分配的账务处理会计分录
  • 所有者权益期末余额-年初余额=净利润吗?
  • python requests读取服务器响应
  • python调用自定义类
  • db2数据库性能调整和优化
  • 企业投资收益要交增值税吗
  • 软件服务费计入管理费用哪个明细
  • 居民和非居民企业的区别是什么
  • 公司交的养老保险的钱可以取出来吗
  • 你知道实施“营改增”对企业有哪些积极的效应么?
  • 哪些情况下可以终止心肺复苏
  • 新收入准则按照期间确认收入
  • 企业一般户怎么查询
  • 预收账款转收入的条件
  • 现代服务业如何提高服务的效率和质量
  • 港口建设费征收管理办法
  • 收到赠送的东西,并给员工自用,怎么做账
  • 汇兑损益是什么凭证类型
  • 零售商品储存的核算包括[ ]
  • 会计中的记账是什么意思
  • sqlserver怎么删除字段
  • mysql@变量
  • win8.1的开始菜单在哪
  • 电脑xp系统运行速度慢
  • agentctl.dll
  • 如何升级win
  • window八
  • win8修改锁屏壁纸
  • win8禁用网络之后如何开启
  • Android自定义控件,切换APP再切回来控件消失了
  • jqueryfind
  • bat脚本延迟执行命令
  • Node.js中的construct构造函数
  • js中两个等号
  • python xml dom
  • unity或者
  • android 动态添加控件
  • 延时加载js文件
  • python面向对象编程心得体会
  • 为构建和谐企业
  • 技术服务费减免企业所得税政策
  • 应交税费应交增值税已交税金是什么意思
  • 单据整理方法
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设