createCanvas(windowWidth, windowHeight, WEBGL);
setAttributes('antialias', true);
camera(0,0,300, 0,0,0, 0,1,0);
function windowResized() {
resizeCanvas(windowWidth, windowHeight);
var gl = this._renderer.GL;
var debugInfo = gl.getExtension("WEBGL_debug_renderer_info");
info.gpu_renderer = gl.getParameter(debugInfo.UNMASKED_RENDERER_WEBGL);
info.gpu_vendor = gl.getParameter(debugInfo.UNMASKED_VENDOR_WEBGL);
info.wgl_renderer = gl.getParameter(gl.RENDERER);
info.wgl_version = gl.getParameter(gl.VERSION);
info.wgl_glsl = gl.getParameter(gl.SHADING_LANGUAGE_VERSION);
info.wgl_vendor = gl.getParameter(gl.VENDOR);
function setGridCell(c,r, d) {
var gridItems = Array.from(HUDgrid.elt.querySelectorAll('*'));
gridItems[(c-1)*8 + (r-1)].innerHTML = d;
HUDgrid = select('.gwrap');
createElement('div', "gpu_renderer: ").parent(HUDgrid);
createElement('div', "wgl_version:" ).parent(HUDgrid);
createElement('div', "wgl_glsl:" ).parent(HUDgrid);
createElement('div', "Framerate:" ).parent(HUDgrid).attribute('gap', '');
createElement('div', "Viewport:" ).parent(HUDgrid);
createElement('div', "Distance:" ).parent(HUDgrid).attribute('gap', '');
createElement('div', "Center:" ).parent(HUDgrid);
createElement('div', "Rotation:" ).parent(HUDgrid);
createElement('div', info.gpu_renderer || '.').parent(HUDgrid).class('green');
createElement('div', info.wgl_version || '.').parent(HUDgrid).class('green');
createElement('div', info.wgl_glsl || '.').parent(HUDgrid).class('green');
createElement('div', '.' ).parent(HUDgrid).class('').attribute('gap', '');
createElement('div', '.' ).parent(HUDgrid).class('');
createElement('div', '.' ).parent(HUDgrid).class('orange').attribute('gap', '');
createElement('div', '.' ).parent(HUDgrid).class('orange');
createElement('div', '.' ).parent(HUDgrid).class('orange');
function displayHUD(cam){
camera(width/2,height/2,(height/2)/tan(PI/6), width/2,height/2,0, 0,1,0);
setGridCell(2,4, nfs(frameRate(), 1, 1));
setGridCell(2,5, nfs([0,0,width,height], 1));
let z0 = cam.eyeX - cam.centerX;
let z1 = cam.eyeY - cam.centerY;
let z2 = cam.eyeZ - cam.centerZ;
const eyeDist = Math.sqrt(z0 * z0 + z1 * z1 + z2 * z2);
setGridCell(2,6, nfs(eyeDist, 1, 2));
setGridCell(2,7, nfs([cam.centerX,cam.centerY,cam.centerZ], 1, 2));
let lax = cam._getLocalAxes();
setGridCell(2,8, nfs([lax.z[0],lax.z[1],lax.z[2]], 1, 3));
var rs = (height-off) / ny - off;
for(var y = 0; y < ny; y++){
var px = width - off - rs;
var py = off + y * (rs+off);
perspective(60 * PI/180, width/height, 1, 5000);
stroke(255, 32, 0); line(0,0,0, 100,0,0);
stroke( 32,255, 32); line(0,0,0, 0,100,0);
stroke( 0, 32,255); line(0,0,0, 0,0,100);
displayHUD(this._renderer._curCamera);