位置: 编程技术 - 正文

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

编辑:rootadmin
译序 Three.js是一个伟大的开源WebGL库,WebGL允许JavaScript操作GPU,在浏览器端实现真正意义的3D。但是目前这项技术还处在发展阶段,资料极为匮乏,爱好者学习基本要通过Demo源码和Three.js本身的源码来学习。 .简介 这是WebGL着色器教程的后半部分,如果你没看过前一篇,阅读这一篇教程可能会使你感到困惑,建议你翻阅前面的教程。 上一篇结束的时候,我们在屏幕中央画了一个好看的粉红色的球体。现在我要开始创建一些更加有意思的东西了。在这一篇教程中,我们会先花点时间来加入一个动画循环,然后是顶点attributes变量和一个uniform变量。我们还要加一些varying变量,这样顶点着色器就可以向片元着色器传递信息了。最终的结果是哪个粉红色的球体会从顶部开始向两侧“点燃”,然后作有规律的运动。这有一点迷幻,但是会帮助你对着色器中的三种变量有更好的了解:他们互相联系,实现了整个集合体。当然我们会在Three.js的框架中做这些。 1.模拟光照 让我们更新颜色吧,这样球体看起来就不会是个扁平晦暗的圆了。如果我们想看看Three.js是怎样处理光照的,我敢肯定你会发现这比我们需要的要复杂得多,所以我们先模拟光照吧。你应该浏览一下Three.js中那些奇妙的着色器,还有一些来自最近的一个 Chris Milk 和 Google, Rome 的WebGL项目。 回到着色器,我们要更新顶点着色器来向片元着色器传递顶点的法向量。利用一个varying变量: 在片元着色器中,我们将会创建一个相同变量名的变量,然后将法线向量和另一个表示来自右上方光线的向量点乘,并将结果作用于颜色。最后结果的效果有点像平行光。 使用点积的原因是:两个向量的点积表明他们有多么“相似”。如果两个向量都是归一化的,而且他们的方向一模一样,点积的值就是1;如果两个向量的方向恰巧完全相反,点积的值就是-1。我们所做的就是把点积的值拿来作用到光纤上,所以如果这个点在球体的右上方,点积的值就是1,也就是完全照亮了;而在另一边的点,获得的点积值接近0,甚至到了-1。我们将获得的任何负值都设置为0。当你将数据传入之后,你就会看到最基本的光照效果了。 下面是什么?我们会将顶点的坐标掺和进来。 2.Attribut变量 接下来我要通过Attribute变量为每一个顶点传递一个随机数,这个随机数被用来将顶点沿着法线向量推出去一段距离。新的结果有点像一个怪异的不规则物体,每次刷新页面物体都会随机变化。现在,他还不会动(后面我会让他动起来),但是几次刷新就可以很好地观察到,他的形状是随机的。 让我们开始为顶点着色器加入attribute变量吧: 你看到什么都没变,因为attribute变量displacement还没有被设定你,所以着色器就使用了0作为默认值。这时displacement还没起作用,但我们马上就要在着色器材质中加上attribute变量了,然后Three.js就会自动地把它们绑在一起运行了。同时也要注意这样一个事实,我将更新后的位置指定给了一个新的三维向量变量,因为原来的位置变量position,就像所有的attribute变量一样,都是只读的。 3.更新着色器材质 现在我们来更新着色器材质,传入一些东西给attribute对象displacement。记住,attribute对象是和顶点一一对应的,所以我们对球体的每一个顶点都有一个值,就像这样: 这样,就可以看到一个变形的球体了。最Cool的是:所有这些变形都是在GPU中完成的。 4.动起来 要使这东西动起来,应该怎么做?好吧,应该做这两件事情。 一个uniform变量amplitude,在每一帧控制displacement实际造成了多少位移。我们可以使用正弦或余弦函数来在每一帧中生成它,因为这两个函数的取值范围从-1到1。 一个帧循环。 我们需要将这个uniform变量加入到着色器材质中,同时也需要加入到顶点着色器中。先来看顶点着色器: 然后更新着色器材质: 我们的着色器也已经就绪了。但我们好像又倒退了一步,屏幕中又只剩下光滑的球了。别担心,这是因为amplitude值设置为0,因为我们将amplitude乘上了displacement,所以现在看不到任何变化。我们还没设置循环呢,所以amplitude只可能是0. 在我们的JavaScript中,需要将渲染过程打包成一个函数,然后用requestAnimationFrame去调用该函数。在这个函数里,我们更新uniform(译者注:即amplitude)的值。 5.小结 就是它了!你看到球体正在奇怪地脉动着。关于着色器,还有太多的内容没有讲到呢,但是我希望这篇教程能够对你有一些帮助。现在,当你看到一些其他的着色器时,我希望你能够理解它们,而且你应该有信心去创建自己的着色器了! 和往常一样,我将这一课的源码打包了

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

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

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

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

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

js鼠标点击事件在各个浏览器中的写法及Event对象属性介绍 IE左键是window.event.button=1右键是window.event.button=2中键是window.event.button=4没有按键动作window.event.button=0Firefox左键是event.button=0右键是event.button=2中键是event.b

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

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

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

下一篇:THREE.JS入门教程(4)创建粒子系统(three.js 教程)

  • 投资公司取得的投资收益属于销售额吗
  • 固定资产报废进项税额怎么处理
  • 年度纳税申报表A105000纳税调整项目明细表中,收入
  • 小规模免缴增值税吗
  • 可以直接申请一般纳税人吗
  • 返岗补贴怎么办理
  • 所得税借方贷方
  • 施工劳务企业要交增值税吗
  • 给员工发开门红包的通知
  • 劳务派遣增值税怎么算
  • 非货币性交换需要确认主营业务收入吗
  • 小规模纳税人能开9个点的发票吗
  • 将外购商品作为非货币性
  • 企业自行出版的报刊费用可否认证抵扣?
  • 贷款利息增值税发票
  • 发票勾选可以勾选几次
  • 闲置的房屋可以计提折旧吗
  • 取得赔偿款的发票可以抵扣吗
  • 公司给个人买的意外险个人有权利查吗
  • 购方收到红字发票怎么办
  • 个体工商户是否属于法人
  • 转账户有误退回会计处理
  • 不计提折旧的固定资产是()
  • 企业报税的详细流程期限为
  • 非主营业务收入记什么
  • 收到水电费的增值税普通发票怎么做账
  • 月底财务为什么要关账,暂时开不了发票
  • linux运行后出现乱码
  • PHP:xml_set_end_namespace_decl_handler()的用法_XML解析器函数
  • php生成验证码的方法
  • 土地使用权进项税如何抵扣
  • 蔚蓝的海怎么样
  • PHP:finfo_file()的用法_fileinfo函数
  • 求源代码
  • mac快捷切换
  • 多域名指向同一ip有问题吗
  • 怎样退出快手粉丝团 已解决
  • yii gridview
  • 网上学电脑哪个软件好
  • 如何禁用笔记本键盘触摸板
  • 深入讲解党的创新理论
  • 营业执照增加经营范围要钱吗
  • 会计信息采集每年都要采集吗
  • 合营企业和联营企业构成关联方吗
  • sql server 2000数据库不能备份的原因
  • 建筑服务预征缴纳税款期初余额怎么算
  • 扫码开票软件
  • 安全基金提取会计分录
  • 进项发票认证后暂不抵扣
  • 暂估成本的账务处理分录
  • 溢价发行可转换债券 利息调整在贷方吗
  • 公司广告制作费用申请报告
  • 预付卡销售和充值怎么做账
  • 营改增政策解答
  • 给分公司开发票由总公司付款怎么办?
  • 多收发票会计分录
  • 现金折扣与商业折扣的计算
  • 应收账款增加说明企业什么
  • 一个完整的活动策划方案范文
  • mysql的心得体会
  • mysql数据库类型有哪些?如何选择合适的数据类型
  • 寻找sql注入漏洞存在哪几个关键点
  • ubuntu20.04怎么样
  • 怎么添加第二个人脸识别
  • xp启用telnet
  • PureVoice.exe - PureVoice是什么进程 有什么用
  • zmweb.exe是什么进程
  • win7旗舰版虚拟光驱下载
  • win10周年版
  • 在linux中使用ssh远程调试后目标板的输出在哪里
  • vue.js基础语法
  • 计算字符串的长度的函数
  • unity更新下载文件
  • js如何修改style
  • nodejss
  • sqlyog使用
  • android 桌面开发
  • 如何查询纳税信用等级证明
  • 国家税务局河南省税务总局官网
  • 普票已开发票怎么作废
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设