来一起用 WebGL 做一个炫酷的3D水波纹页面

说起 WebGL,也许很多人还不知道是什么,但你在生活中一定接触过。

一些很酷炫的活动宣传页,VR产品展示等等都是通过 WebGL 技术实现的。而且在大厂面试中,WebGL作为一个独立的岗位,薪资也是非常高的

1ac603493f3792506543dc740bf5bfc7.png

(截图自:Boss直聘)

今天就和大家具体聊一聊 WebGL 。

01

什么是 WebGL 

WebGL是在网页上绘制和渲染三维图形的技术,可以让用户与其进行交互。

我们之前学过的div+css、canvas 2d 都是专注于二维图形的,它们虽然也能模拟一部分三维效果,但它们不如WebGL灵活和专业。

f190c4debd44d786d63b6e9cbf262b88.png

当前随着 5G 时代的到来,3D可视化需求大量涌现。在3D 游戏,酷炫的活动宣传页,三维数字城市,VR全景展示、3D 产品展示等领域中,很多项目都是用 WebGL 实现的。

c923aaefd48895c120478edf3af01ffe.png

02

WebGL 的发展前景

尽管从事 WebGL 工程师岗位的人不多,但也不妨碍它有不错的发展前景。

1、发展潜力大

WebGL 的行业背景决定了其在市场中具有广大的需求量,而且它的发展潜力很大,不像曾经的flash,学完了,还会面临被淘汰的风险。

2、竞争压力小

WebGL 不像 Vue、React 等主流框架,它属于一种小众职业,职场竞争力要比主流框架小的多。而且,WebGL也是很适合UI 学习的,因为它在视觉上更加灵活自由,可以让 UI 放飞自己的灵感。

3、薪资高

WebGL 薪资可观,根据职友集的数据显示,全国地区WebGL 工程师的平均薪资可达到19.4K。如果你理解WebGL原理,可以熟练使用three.js,会用React,月薪甚至可达25k+

10df57a4e3855552434a7e9866a7d67c.png

而且他的薪资趋势也在逐年上升。

9b5533c62883e86cc9d076f7e91283ed.png

03

如何学习WebGL

WebGL 是一个小众职业,大部分的前端工程师并不会这个,精通底层原理的人就更少了,这也导致很多想要学习的人找不到合适的学习路线,网上的学习资料也无法判断是对是错。

没关系,我给大家找来了前京东WebGL工程师李伟老师给大家带来一场《在WebGL中解锁三维世界的大门》公开课,现场敲代码带你了解 WebGL 基本的开发流程,通过实战案例带你学习WebGL

你将学习:

7f6b9ef01173a7070ec25870e1d75a79.png

上课时间:11月12日晚8:00

立即扫码,0元报名

f048139e9d674c200d60687cdd7a4204.png

快人一步上手 WebGL

到课还可领取《让大厂面试官眼前一亮的简历模板》,上完课程还可以领取《React最佳实战入门》,所有福利均由助教老师发放,记得添加助教老师微信领取哦!

04

课程内容安排

f9b2c5465cd73a42ab20219a608cf8c8.png

本次课程中老师将教给你 WebGL 是什么以及它的市场价值,并且会现场敲代码带你了解 WebGL 基本的开发流程,以及如何通过 WebGL 绘制水波纹效果

20dd89e37b0457972de1da1f25c4b266.gif

05

主讲老师介绍

本次课程的主讲老师李伟是前京东WebGL工程师,曾经开发京东的仓储可视化项目,对其仓库数据进行可视化操作。

64eeeaa4c0049bed30ede9d6745debc5.png

老师在 WebGL 方面有着丰富的经验,跟着老师学习一定不会错!还有超多实战案例,记得参与课程了解哦!

42a2e8757c6479f37a4d74b78d9d5784.png

上课时间:11月12日晚8:00

立即扫码,0元报名

8788bc74e6830f3d5ca96656c415ea7c.png

快人一步上手 WebGL

到课还可领取《让大厂面试官眼前一亮的简历模板》,上完课程还可以领取《React最佳实战入门》,所有福利均由助教老师发放,记得添加助教老师微信领取哦!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要实现一个好看的水波纹,可以借助QML的ShaderEffect组件和WebGL Shaders技术。 首先,需要定义一个圆形区域,作为水波纹的初始位置,并将其绑定到ShaderEffect组件的sourceRect属性中。 然后,需要在ShaderEffect组件中定义一个片段着色器(fragment shader),用于在圆形区域中生成水波纹效果。可以使用正弦函数和时间因素来实现水波的扩散和波动效果。具体实现可以参考以下代码: ``` ShaderEffect { id: rippleEffect property variant ripplePosition: Qt.point(0, 0) property variant rippleColor: "#ffffff" property int rippleRadius: 50 fragmentShader: " uniform highp float qt_Opacity; uniform highp vec2 qt_TexCoord0; uniform highp vec2 qt_Matrix; uniform highp vec2 ripplePosition; uniform highp float rippleRadius; uniform highp float time; uniform highp vec4 rippleColor; void main() { highp vec2 texCoord = qt_TexCoord0 * qt_Matrix; highp float distance = distance(texCoord, ripplePosition); if (distance < rippleRadius) { highp float alpha = 1.0 - ((rippleRadius - distance) / rippleRadius); highp float wave = sin((distance + time * 0.01) * 10.0) * 0.05; highp vec4 color = vec4(rippleColor.rgb, rippleColor.a * alpha); gl_FragColor = color * (1.0 + wave); } else { gl_FragColor = texture2D(qt_Texture0, qt_TexCoord0); } } " sourceRect: Qt.rect(0, 0, parent.width, parent.height) live: true onRipplePositionChanged: rippleEffect.update() } ``` 在代码中,fragmentShader中定义了水波纹效果的具体实现,包括对圆形区域内的像素进行水波变化计算,以及根据时间因素和颜色因素来生成水波纹的颜色和透明度。同时,ShaderEffect组件的sourceRect属性绑定了父组件的大小,确保水波纹覆盖整个父组件。 最后,在QML中调用ShaderEffect组件,并使用MouseArea组件来捕捉鼠标点击事件,并将点击位置作为水波纹的起始位置,如下所示: ``` Rectangle { width: 400 height: 400 ShaderEffectItem { id: rippleItem anchors.fill: parent sourceItem: parent sourceRect: Qt.rect(0, 0, parent.width, parent.height) effect: rippleEffect } MouseArea { anchors.fill: parent onClicked: { rippleEffect.ripplePosition = Qt.point(mouse.x, mouse.y) rippleEffect.rippleColor = "#ffffff" rippleEffect.rippleRadius = 50 rippleEffect.update() } } } ``` 在代码中,通过设置MouseArea组件的onClicked事件,将鼠标点击位置作为ShaderEffect组件的ripplePosition属性的值,并设置水波纹的初始半径和颜色。然后,手动调用ShaderEffect组件的update方法来更新水波纹效果。 通过以上实现,就可以得到一个简单的水波纹效果。可以根据实际需求对片段着色器进行调整,来达到不同的水波纹效果

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值