Webgl - Like Opengl, But Web!
Webgl - Like Opengl, But Web!
Webgl - Like Opengl, But Web!
• Sane languages
• Based on OpenGL ES
• Easier implementation
Demo time!
The Web Chapter
A SCIENCE AREA IN KNOWIT OBJECTNET
// Compile shaders
var vertexShaderSource =
document.getElementById("vertex-shader").textContent;
var vertexShader = gl.createShader(gl.VERTEX_SHADER);
gl.shaderSource(vertexShader, vertexShaderSource);
gl.compileShader(vertexShader);
The Web Chapter
A SCIENCE AREA IN KNOWIT OBJECTNET
void main(void) {
gl_Position = vec4(aVertexPosition, 1.0);
vColor = aVertexColor;
}
</script>
The Web Chapter
A SCIENCE AREA IN KNOWIT OBJECTNET
// Link shaders
var shaderProgram = gl.createProgram();
gl.attachShader(shaderProgram, fragmentShader);
gl.attachShader(shaderProgram, vertexShader);
gl.linkProgram(shaderProgram);
gl.useProgram(shaderProgram);
The Web Chapter
A SCIENCE AREA IN KNOWIT OBJECTNET
shaderProgram.vertexColorAttribute =
gl.getAttribLocation(shaderProgram, "aVertexColor");
gl.enableVertexAttribArray(shaderProgram.vertexColorAttribute);
The Web Chapter
A SCIENCE AREA IN KNOWIT OBJECTNET
// Vertex positions
var vertexPositionBuffer = gl.createBuffer();
gl.bindBuffer(gl.ARRAY_BUFFER, vertexPositionBuffer);
var vertices = [
0.0, 0.9, 0.0,
-0.9, -0.9, 0.0,
0.9, -0.9, 0.0
];
gl.bufferData(
gl.ARRAY_BUFFER, new Float32Array(vertices), gl.STATIC_DRAW
);
vertexPositionBuffer.itemSize = 3;
vertexPositionBuffer.numItems = 3;
The Web Chapter
A SCIENCE AREA IN KNOWIT OBJECTNET
// Vertex colors
var vertexColorBuffer = gl.createBuffer();
gl.bindBuffer(gl.ARRAY_BUFFER, vertexColorBuffer);
var colors = [
1.0, 0.0, 0.0, 1.0,
0.0, 1.0, 0.0, 1.0,
0.0, 0.0, 1.0, 1.0
];
gl.bufferData(
gl.ARRAY_BUFFER, new Float32Array(colors), gl.STATIC_DRAW
);
vertexColorBuffer.itemSize = 4;
vertexColorBuffer.numItems = 3;
The Web Chapter
A SCIENCE AREA IN KNOWIT OBJECTNET
// Set viewport size, clear canvas, pass in buffers, ACTUALLY DRAW SOMETHING??!?!
gl.viewport(0, 0, canvas.width, canvas.height);
gl.clearColor(0.0, 0.0, 0.0, 1.0);
gl.enable(gl.DEPTH_TEST);
gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);
gl.bindBuffer(gl.ARRAY_BUFFER, vertexPositionBuffer);
gl.vertexAttribPointer(
shaderProgram.vertexPositionAttribute,
vertexPositionBuffer.itemSize, gl.FLOAT, false, 0, 0
);
gl.bindBuffer(gl.ARRAY_BUFFER, vertexColorBuffer);
gl.vertexAttribPointer(shaderProgram.vertexColorAttribute,
vertexColorBuffer.itemSize, gl.FLOAT, false, 0, 0);
gl.drawArrays(gl.TRIANGLES, 0, vertexPositionBuffer.numItems);
The Web Chapter
A SCIENCE AREA IN KNOWIT OBJECTNET
• Awkward API
three.js
• Familiar vocabulary (“camera”, not “mat4”)
• Animation
• etcetcetc...
The Web Chapter
A SCIENCE AREA IN KNOWIT OBJECTNET
• Babylon.js (free)