WebGL - 示例 绘制圆形点

本文介绍了如何使用WebGL将默认的方形点转换为圆形点。通过理解光栅化过程,利用顶点着色器和片元着色器中的内置变量,判断并剔除超出圆形范围的片元,最终实现圆形点的绘制。示例代码展示了具体的实现方法,并提供了示例效果图和链接。
摘要由CSDN通过智能技术生成

之前绘制的点都是正方形的,类似一个像素点,那怎么才能把方点绘制成圆点,顶点着色器和片元着色器之间发生了光栅化过程,一个顶点被光栅化为了多个片元,每一个片元都会经过片元着色器处理,直接绘制就是方形的点,要绘制圆形的点就需要把多余的片元给削去;

在这里插入图片描述

将矩形削成圆形需要知道每个片元在光栅化过程中的坐标,在片元着色器中通过 **内置变量 gl_FragCoord**来访问片元的坐标,还可以通过另一个 **内置变量 gl_PointCoord**来访问片元在绘制的点内的坐标;

变量类型和名称描述
vec4 gl_FragCoord片元的窗口坐标
vec4 gl_PointCoord片元在被绘制的点内的坐标(0.0, 1.0)

gl_PointCoord变量表示当前片元在所属的点内的坐标,坐标值的区间是0.01.0,因此为了将矩形削成圆形,需要将点的中心(0.5, 0.5)距离超过以0.5为半径范围外的片元剔除掉,在片元着色器中可以使用 discard来放弃当前片元

在这里插入图片描述

具体剔除片元的代码在片元着色器中实现

片元着色器代码

precision mediump float;
void main(){
    // 点的中心坐标
    float dist = distance(gl_PointCoord, vec2(0.5, 0.5));
    // 如果点的半径小于 0.5 则绘制,大于则放弃当前片元
    if(dist < 0.5) {
        gl_FragColor = vec4(1.0, 1.0, 0.0, 1.0);
    } else {
      discard;//放弃当前片元  
    }
}

顶点着色器代码

attribute fec4 a_Position;
void main(){
    gl_Position = a_Position;// 顶点位置
    gl_PointSize = 10.0;// 顶点大小
}

示例效果图

在这里插入图片描述
示例链接

示例:绘制圆形点

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值