事件是指发生、发生或可能发生的事情或情况。在不同的领域和行业中,事件可能具有不同的定义和含义。例如,在计算机科学中,事件是计算机程序在运行时发生的事情或情况,如用户键入键盘上的键以触发计算机响应。在商业和市场营销中,事件可以是推出新产品,举办营销促销活动,或客户提出投诉和建议等。无论是哪个领域,事件都是需要记录、追踪、分析和处理的重要信息。
在计算机中,事件通常指任何已知的行动或情况变化。以下是一些常见的计算机事件:
这些事件可以通过计算机的操作系统或应用程序来检测和响应。例如,用户单击按钮时,应用程序可以执行与该按钮相关的操作,而操作系统可以检测到网络连接断开并自动重新连接。
WEBGL鼠标事件的整体流程大致如下:
具体的实现方式和流程可能会因具体场景而有所不同,但以上步骤是整个流程的核心。

计算WEBGL点击位置的具体步骤如下:
var x = (event.clientX - rect.left) / canvas.clientWidth * 2 - 1;
var y = 1 - (event.clientY - rect.top) / canvas.clientHeight * 2;其中,canvas.clientWidth和canvas.clientHeight分别是画布元素的宽度和高度,rect.left和rect.top分别是画布元素左上角在屏幕上的x和y坐标。
通过以上步骤,即可计算出WEBGL点击的位置。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="../lib/index.js"></script>
<style>
* {
margin: 0;
padding: 0;
}
canvas{
margin: 50px auto 0;
display: block;
background: yellow;
}
</style>
</head>
<body>
<canvas id="canvas" width="400" height="400">
此浏览器不支持canvas
</canvas>
</body>
</html>
<script>
const ctx = document.getElementById('canvas')
const gl = ctx.getContext('webgl')
// 创建着色器源码
const VERTEX_SHADER_SOURCE = `
// 只传递顶点数据
attribute vec4 aPosition;
void main() {
gl_Position = aPosition; // vec4(0.0,0.0,0.0,1.0)
gl_PointSize = 10.0;
}
`; // 顶点着色器
const FRAGMENT_SHADER_SOURCE = `
void main() {
gl_FragColor = vec4(1.0,0.0,0.0,1.0);
}
`; // 片元着色器
const program = initShader(gl, VERTEX_SHADER_SOURCE, FRAGMENT_SHADER_SOURCE)
const aPosition = gl.getAttribLocation(program, 'aPosition');
const points = []
ctx.onclick = function(ev) {
// 坐标
const x = ev.clientX
const y = ev.clientY
const domPosition = ev.target.getBoundingClientRect();
const domx = x - domPosition.left
const domy = y - domPosition.top;
/*
0 200 400
-1 0 1
-200 0 200
-1 0 1
需要先 -200 (当前画布的宽度) 然后再 除以 200
1 0 -1
0 200 400
200 0 -200 / 200
需要先让 200 减这个数,然后再 / 200
* */
const halfWidth = ctx.offsetWidth / 2
const halfHeight = ctx.offsetHeight / 2
const clickX = (domx - halfWidth) / halfWidth
const clickY = (halfHeight - domy) / halfHeight
points.push({
clickX, clickY
})
for (let i = 0; i < points.length; i++) {
gl.vertexAttrib2f(aPosition, points[i].clickX, points[i].clickY)
gl.drawArrays(gl.POINTS, 0, 1);
}
}
</script>