WebGL 鼠标响应 如何画爱心

Webgl 鼠标响应 如何画爱心

利用WebGL实现了鼠标点击网页内任意位置绘制爱心

下面展示 function addheart(x,y)

function addheart(x,y){
 var rect=canvas.getBoundingClientRect();
 x=x-rect.left;
 y=canvas.height-(y-rect.top);
 
 var vertices=[];
 var color=[];
 
 //心的大小
 var Size = 2;
 
 
 for(var i = 0; i < 36; i++)
 {
  var Angle = 2*i*Math.PI/36;
  //点的坐标
  var x1 = Size * 16 * Math.pow(Math.sin(Angle),3);
  
  var y1 = Size * (13 * Math.cos(Angle) - 5 * Math.cos(2 * Angle) - 2 * Math.cos(3 * Angle) - Math.cos(4 * Angle));
  
  vertices[i]=vec3(x1,y1,0);
 }
 var data=[];
 
 for(var i=0;i<36;i++){
  data.push(add(vec3(x,y,0),vertices[i]));
  data.push(vec3(1.0, Math.random(), Math.random()));
  //data.push(vec3(x,y,0));
  //data.push(vec3(1.0,0.0,0.0));
 
 }
 
 gl.bufferSubData(gl.ARRAY_BUFFER,
 count*2*3*3*Float32Array.BYTES_PER_ELEMENT,
 flatten(data));
 vertices.length=0;
 color.length=0;
 count+=18;
 requestAnimFrame(render);
}

x1,y1构成了❤的路径

for(var i = 0; i < 36; i++)
 {
  var Angle = 2*i*Math.PI/36;
  //点的坐标
  var x1 = Size * 16 * Math.pow(Math.sin(Angle),3);
  
  var y1 = Size * (13 * Math.cos(Angle) - 5 * Math.cos(2 * Angle) - 2 * Math.cos(3 * Angle) - Math.cos(4 * Angle));
  
  vertices[i]=vec3(x1,y1,0);
 }

下面展示鼠标点击响应事件

canvas.onclick=function(){
  addheart(event.clientX,event.clientY);
};

具体的效果实现
在这里插入图片描述
鼠标多次点击后的样式

本程序的源代码包在:
程序代码下载地址

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值