HUD
HUD平视显示器
什么是HUD?
答: head up display ,即 平视显示器 。
之所以是 平视 , 是因为最初是用于称呼方便飞行员能够平视前方的驾驶舱玻璃就能够看到仪表图形投影的显示器。
本例要实现的HUD即在三维场景前方绘制二维三角形和文本。
简单实现思路
- 为 三维图形 和 二维图形 各自准备一个 canvas。
- 将两个canvas 重叠放置 (HUD在上)。
- 在三维canvas上使用 WebGL API 绘制三维场景。
- 在二维canvas上使用 canvas 2D API绘制HUD信息。
HUD Code
1 | <body onload="main()"> |
1 | function main() { |
1 | function draw2D(ctx, currentAngle) { |
有关程序的一些问题。
HUD.js大部分是基于PickFace.js的,二者的区别在哪里?
- 获取的上下文不同
- PickFace 只获取三维画布
1
2let canavs = document.getElementById('webgl');
let gl = getWebGLContext(canvas); - HUD 获取二维和三维画布
1
2
3
4let canavs = document.getElementById('webgl');
let hud = document.getElementById('hud');
let gl = getWebGLContext(canvas);
let ctx = getWebGLContext(hud);
- PickFace 只获取三维画布
- 鼠标点击事件注册的画布不同(主要是因为画布层级不同)
- PickFace 的鼠标事件注册到 三维画布 上
1
canvas.onmousedown = function(ev){...}
- HUD 的鼠标事件注册到 二维画布 上
1
hud.onmousedown = function(ev){...}
- PickFace 的鼠标事件注册到 三维画布 上
draw2D中绘制使用的函数都具有什么特征?
clearRect
1 | ctx.clearRect(0,0,400,400) |
用于清除给定矩形内的像素。
beginPath
1 | ctx.beginPath() |
用于起始一条路径,或重置当前路径。
moveTo
1 | ctx.moveTo(120, 10); |
用于把路径移动到画布中的指定点,不创建线条。
lineTo
1 | ctx.lineTo(200,150); |
用于添加一个新点,然后在画布中创建从该点到最后指定点的线条。
closePath
1 | ctx.closePath(); |
用于创建从当前点回到起始点的路径。
stroke
1 | ctx.strokeStyle = 'rgba(0,255,0,1)'; |
用于设置或返回用于笔触的颜色、渐变或模式。
1 | ctx.stroke(); |
用于绘制已定义的路径。
text
1 | ctx.font = '18px "Times New Roman"'; |
用于设置或返回文本内容的当前字体属性
1 | ctx.fillStye = 'rgba(0,255,0,1)'; |
用于设置或返回用于填充绘画的颜色、渐变或模式。
1 | ctx.fillText('HUD: Head Up Display', 40, 180); |
用于在画布上绘制被填充的文本。
在网页上方显示三维物体
该程序是基于PickFace。
3DoverWeb Code
1 | <body onload="main()"> |
与PickFace唯一的不同就是canvas背景色的设置。
1 | ... |