JavaScript WebGL 绘制顺序

本文探讨JavaScript WebGL中绘制顺序的重要性,特别是在三维场景中。默认情况下,WebGL按照缓冲区顺序绘制,后绘制的图形会覆盖前面的。然而,三维绘制仅依赖z轴深度信息并不足够,需要开启DEPTH_TEST和正确投影来避免错误效果。同时,文章介绍了深度冲突(Z-fighting)现象及其解决方案,包括多边形偏移(polygon offset)的使用,以解决多次绘制时的显示异常问题。

引子

JavaScript WebGL 三维相关概念中尝试一些效果的时候,又碰到了新问题,就去查了资料,自己尝试后总结下。

绘制顺序

之前二维绘制顺序并没有产生明显的不好效果,现在绘制三维影响就比较大了。

先看看二维相同一套顶点不同顺序的效果:

两个面的形状和对应颜色始终保持一致,就是缓冲的顺序变了,发现 WebGL 默认情况下会按照缓冲区中顺序绘制,也就是后绘制的图形会覆盖先绘制的图形。这个就像一层一层贴纸一样,比较符合一般认知,所以在二维绘制时并没发现明显不对劲的地方。

关于三维绘制顺序先思考一下:三维的顶点坐标有三个分量,第三个分量是在 z 轴上表示深度信息,默认垂直屏幕向内为负方向,那么 z 值越大表示离屏幕越近,既然都有区分的依据,直接按照这个顺序绘制应该就可以了。实际试试:

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值