WebGL 着色器偏导数dFdx和dFdy介绍

2019-07-06
阅读 2 分钟
3.4k
偏导数函数(HLSL中的ddx和ddy,GLSL中的dFdx和dFdy)是片元着色器中的一个用于计算任何变量基于屏幕空间坐标的变化率的指令(函数)。在WebGL中,使用的是dFdx和dFdy,还有另外一个函数fwidth = dFdx + dFdy。

JavaScript 一元正号运算符

2019-06-29
阅读 2 分钟
2.4k
一元正号运算符(+)位于其操作数前面,计算其操作数的数值,如果操作数不是一个数值,会尝试将其转换成一个数值。 尽管一元负号也能转换非数值类型,但是一元正号是转换其他对象到数值的最快方法,也是最推荐的做法,因为它不会对数值执行任何多余操作。

JavaScript展开操作符(Spread operator)介绍

2019-06-20
阅读 3 分钟
2.1k
你可以通过展开操作符(Spread operator)...扩展一个数组对象和字符串。展开运算符(spread)是三个点(…),可以将可迭代对象转为用逗号分隔的参数序列。如同rest参数的逆运算。

绕圆弧动画的向量解决方式

2019-06-18
阅读 8 分钟
2.3k
记得几年前,我的一个同事J需要做一个动画功能,大概的需求是实现球面上一个点到另外一个点的动画。当时他遇到了难度,在研究了一个上午无果的情况下,咨询了我。我就告诉他说,你先尝试一个简化的版本,就是实现圆环上一个点到另外一个点的动画。如下图所示,要实现点A插值渐变到B的动画过程。

canvas反向裁剪技巧

2019-02-15
阅读 2 分钟
2.6k
我们都知道在canvas 可以通过clip来实现剪裁功能,其步骤一般是先设置要裁剪的区域(路径),然后通过ctx.clip()的实现裁剪,裁剪之后,后续的绘制只能在裁剪的区域显示效果,比如如下一段代码,实现了一个圆形裁剪:

canvas 绘制双线技巧

2018-12-20
阅读 4 分钟
2.7k
负责这块功能开发的小伙,姑且称之为L吧,最开始是通过数学计算的方式来实现这种双线,也就是在原来的路径的基础上,计算出两条路径。但是这个过程的计算算挺复杂,而是最终实现的效果很耗性能,性能损耗估计主要在于路径的计算上。

如何优雅的构建排序公式

2018-12-12
阅读 3 分钟
1.6k
做这个需求的是一个新入职的小伙,思考摸索了很久,他也没有找到合适的方法。不得不说,部分新入职的小伙的思维能力还是有待提高啊。其实这个问题很简单,就是对元素按照坐标进行排序。从图上可以看出规则是x坐标优先于y坐标,具体来说,两个元素a和b:如果a.x > b.x 则 a > b,如果a.x < b.x 则 a < b,如果a...

canvas高效绘制10万图形,你必须知道的高效绘制技巧

2018-11-25
阅读 8 分钟
4.5k
恩,很简单嘛,可以回家睡觉了。等等,客户要求绘制的极限是10万个,而且每次绘制不能卡顿。先看下绘制10万个圆圈的时间是多久,用console.time 统计绘制时间:

WebGL2系列之实例数组(Instanced Arrays)

2018-11-17
阅读 7 分钟
4.4k
实例化是一种只调用一次渲染函数却能绘制出很多物体的技术,它节省渲染一个物体时从CPU到GPU的通信时间。实例数组是这样的一个对象,使用它,可以把原来的的uniform变量转换成attribute变量,而且这个attribute变量对应的缓冲区可以被多个对象使用;这样在绘制的时候,可以减少webgl的调用次数。

WebGL 单通道wireframe渲染

2018-08-28
阅读 3 分钟
2.6k
使用此种方式绘制线框的时候,深度值偏移是必要的。那是因为,线条的光栅化过程和多边形的光栅化过程并不是完全一致的。这就导致绘制一个多边形的边和绘制多边形本身,相同位置的片元,其深度值可能并不一样。

简化一段javascript代码

2018-06-17
阅读 1 分钟
1.4k
在实际的项目中,我们经常会有如下的需求:从一个map中获取某key的值,如果发现对应的key的值为null,则为该key创建一个值(一般为初始值),然后把这个值存回到map中,代码如下:

WebGL2系列之不可变纹理

2018-01-20
阅读 1 分钟
3.8k
在WebGL1中,纹理包括2D纹理和立方体纹理,在实际的使用中,如果纹理的图片是宽和高是2的幂,可以自动生成纹理的mipmap。除此之外,还可以通过gl.texImage2D函数独立指定纹理的每个mipmap的级别。因此,这会导致一个一般的编程人员不易觉察的问题,这涉及到显卡底层驱动。简单来说,就是会导致驱动程序无法在绘图之前确...

WebGL2系列之图元重启

2017-12-04
阅读 2 分钟
2.2k
在使用WebGL绘制图形的时候,大多数情况下,绘制一个图形的时候,其各个图元都是相连的。 但是在一些情况下,我们需要绘制图元不相连的图形,如果绘制的模式是gl.TRAINGLES或者gl.LINES,也是可以达到的,但是如果绘制的模式是gl.TRAINGLE_STRIP,gl.TRAINGLE_FAN,gl.LINE_STRIP,gl.LINE_LOOP的时候,就没法在一次绘制...

正则表达式懒惰贪婪和replace函数

2017-11-29
阅读 2 分钟
2.5k
abc{1220}cde{2222}def{cccc}替换成abc{1}cde{2}def{3}也就是把{}匹配到的内容,用匹配的索引替代掉。

WebGL2系列之顶点数组对象

2017-11-27
阅读 5 分钟
4.1k
使用了顶点缓冲技术后,绘制效率有了较大的提升。但是还有一点不尽如人意,那就是顶点的位置坐标、法向量、纹理坐标等不同方面的数据每次使用时需要单独指定,重复了一些不必要的工作。WebGL2提供了一种专门用于解决此问题的对象——顶点数组对象(VAO)。本节将介绍顶点数组对象。

WebGL2系列之从WebGL1迁移到WebGL2

2017-11-14
阅读 3 分钟
8.3k
WebGL2几乎100%兼容WebGL1,需要注意的是,这里说的几乎,也就是说,也是存在一些细微的差别的,因此原本WebGL1的代码迁移到WebGL2,应该不会有遇到太多的困难;不过WebGL2和WebGL1有两个主要的差别,请看下文。

WebGL2系列之引言

2017-11-08
阅读 1 分钟
3.3k
时光荏苒岁月如梭,不知不觉间,青丝变白发,哦不是,应该是WebGL已经发展到了2.0阶段:WebGL2,WebGL2相比WebGL增加了很多新的特性,这些新的特性能够帮助程序开发人员实现更多 更酷 更炫 更高性能的Web三维程序。本系列文章将会向读者展示WEBGL2开发与WebGL的区别和WEBGL2的一些重要的新特性进行介绍.

JQuery 事件绑定不生效

2017-10-10
阅读 3 分钟
2.1k
一个同时问我,JQuery事件绑定为什么不生效,最好通过查找,发现了问题。一般而言,JQuery事件绑定不生效,是一些新手经常遇到的问题,其实都是简单的问题,大概分两种情况。 先上代码,以下两个button的事件绑定都不生效。

调试你的node.js程序(一)

2017-08-02
阅读 2 分钟
3.6k
使用node.js开发已经有一段时间了,最开始的调试是使用工具node-inspector;不过node-inspector已经很长一段时间不能用了。 现在要调试node.js程序需要使用新的方式。新的调试的方式有很多种,本文将介绍一种简单直接的方式。