Created
November 17, 2020 17:40
-
-
Save MinaGabriel/5f8231a5b8a7f3dab9c153c688f74f4b to your computer and use it in GitHub Desktop.
This file contains 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"> | |
// LookAtRotatedTriangles.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' + | |
'uniform mat4 u_ModelMatrix;\n' + | |
'varying vec4 v_Color;\n' + | |
'void main() {\n' + | |
' gl_Position = u_ViewMatrix * u_ModelMatrix * 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.0, 0.0, 1.0); | |
// Get the storage location of u_ViewMatrix and u_ModelMatrix | |
var u_ViewMatrix = gl.getUniformLocation(gl.program, 'u_ViewMatrix'); | |
var u_ModelMatrix = gl.getUniformLocation(gl.program, 'u_ModelMatrix'); | |
if(!u_ViewMatrix || !u_ModelMatrix) { | |
console.log('Failed to get the storage location of u_viewMatrix or u_ModelMatrix'); | |
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); | |
// Calculate matrix for rotate | |
var modelMatrix = new Matrix4(); | |
modelMatrix.setRotate(-10, 0, 0, 1); // Rotate around z-axis | |
// Pass the view projection matrix and model matrix | |
gl.uniformMatrix4fv(u_ViewMatrix, false, viewMatrix.elements); | |
gl.uniformMatrix4fv(u_ModelMatrix, false, modelMatrix.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 | |
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 vertex information to 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_Color 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