Created
November 17, 2020 16:55
-
-
Save MinaGabriel/fb4ad26846d1edddff562cebbe36761a to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<!DOCTYPE html> | |
<html lang="en"> | |
<head> | |
<meta charset="utf-8"/> | |
<title>Translate a Triangle</title> | |
<body onload="main()"> | |
<canvas id="webgl" width="400" height="400"> | |
Please use a browser that supports "canvas" | |
</canvas> | |
</body> | |
<script src="https://rawgit.com/huningxin/webglbook_examples/master/lib/webgl-utils.js"></script> | |
<script src="https://rawgit.com/huningxin/webglbook_examples/master/lib/webgl-debug.js"></script> | |
<script src="https://rawgit.com/huningxin/webglbook_examples/master/lib/cuon-utils.js"></script> | |
<script src="https://rawgit.com/huningxin/webglbook_examples/master/lib/cuon-matrix.js"></script> | |
<script type="text/javascript"> | |
// LookAtTriangles.js (c) 2012 matsuda | |
// Vertex shader program | |
var VSHADER_SOURCE = | |
'attribute vec4 a_Position;\n' + | |
'attribute vec4 a_Color;\n' + | |
'uniform mat4 u_ViewMatrix;\n' + | |
'varying vec4 v_Color;\n' + | |
'void main() {\n' + | |
' gl_Position = u_ViewMatrix * a_Position;\n' + | |
' v_Color = a_Color;\n' + | |
'}\n'; | |
// Fragment shader program | |
var FSHADER_SOURCE = | |
'#ifdef GL_ES\n' + | |
'precision mediump float;\n' + | |
'#endif\n' + | |
'varying vec4 v_Color;\n' + | |
'void main() {\n' + | |
' gl_FragColor = v_Color;\n' + | |
'}\n'; | |
function main() { | |
// Retrieve <canvas> element | |
var canvas = document.getElementById('webgl'); | |
// Get the rendering context for WebGL | |
var gl = getWebGLContext(canvas); | |
if (!gl) { | |
console.log('Failed to get the rendering context for WebGL'); | |
return; | |
} | |
// Initialize shaders | |
if (!initShaders(gl, VSHADER_SOURCE, FSHADER_SOURCE)) { | |
console.log('Failed to intialize shaders.'); | |
return; | |
} | |
// Set the vertex coordinates and color (the blue triangle is in the front) | |
var n = initVertexBuffers(gl); | |
if (n < 0) { | |
console.log('Failed to set the vertex information'); | |
return; | |
} | |
// Specify the color for clearing <canvas> | |
gl.clearColor(0, 0, 0, 1); | |
// Get the storage location of u_ViewMatrix | |
var u_ViewMatrix = gl.getUniformLocation(gl.program, 'u_ViewMatrix'); | |
if (!u_ViewMatrix) { | |
console.log('Failed to get the storage locations of u_ViewMatrix'); | |
return; | |
} | |
// Set the matrix to be used for to set the camera view | |
var viewMatrix = new Matrix4(); | |
viewMatrix.setLookAt(0.20, 0.25, 0.25, 0, 0, 0, 0, 1, 0); | |
// Set the view matrix | |
gl.uniformMatrix4fv(u_ViewMatrix, false, viewMatrix.elements); | |
// Clear <canvas> | |
gl.clear(gl.COLOR_BUFFER_BIT); | |
// Draw the rectangle | |
gl.drawArrays(gl.TRIANGLES, 0, n); | |
} | |
function initVertexBuffers(gl) { | |
var verticesColors = new Float32Array([ | |
// Vertex coordinates and color(RGBA) | |
0.0, 0.5, -0.4, 0.4, 1.0, 0.4, // The back green one | |
-0.5, -0.5, -0.4, 0.4, 1.0, 0.4, | |
0.5, -0.5, -0.4, 1.0, 0.4, 0.4, | |
0.5, 0.4, -0.2, 1.0, 0.4, 0.4, // The middle yellow one | |
-0.5, 0.4, -0.2, 1.0, 1.0, 0.4, | |
0.0, -0.6, -0.2, 1.0, 1.0, 0.4, | |
0.0, 0.5, 0.0, 0.4, 0.4, 1.0, // The front blue one | |
-0.5, -0.5, 0.0, 0.4, 0.4, 1.0, | |
0.5, -0.5, 0.0, 1.0, 0.4, 0.4, | |
]); | |
var n = 9; | |
// Create a buffer object | |
var vertexColorbuffer = gl.createBuffer(); | |
if (!vertexColorbuffer) { | |
console.log('Failed to create the buffer object'); | |
return -1; | |
} | |
// Write the vertex coordinates and color to the buffer object | |
gl.bindBuffer(gl.ARRAY_BUFFER, vertexColorbuffer); | |
gl.bufferData(gl.ARRAY_BUFFER, verticesColors, gl.STATIC_DRAW); | |
var FSIZE = verticesColors.BYTES_PER_ELEMENT; | |
// Assign the buffer object to a_Position and enable the assignment | |
var a_Position = gl.getAttribLocation(gl.program, 'a_Position'); | |
if(a_Position < 0) { | |
console.log('Failed to get the storage location of a_Position'); | |
return -1; | |
} | |
gl.vertexAttribPointer(a_Position, 3, gl.FLOAT, false, FSIZE * 6, 0); | |
gl.enableVertexAttribArray(a_Position); | |
// Assign the buffer object to a_Color and enable the assignment | |
var a_Color = gl.getAttribLocation(gl.program, 'a_Color'); | |
if(a_Color < 0) { | |
console.log('Failed to get the storage location of a_Color'); | |
return -1; | |
} | |
gl.vertexAttribPointer(a_Color, 3, gl.FLOAT, false, FSIZE * 6, FSIZE * 3); | |
gl.enableVertexAttribArray(a_Color); | |
// Unbind the buffer object | |
gl.bindBuffer(gl.ARRAY_BUFFER, null); | |
return n; | |
} | |
</script> | |
</head> | |
</html> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment