Created
November 5, 2020 19:42
-
-
Save MinaGabriel/0e0a973903a60df26cd3b5ee0bec3615 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
<html lang="en"><head> | |
<meta charset="utf-8"> | |
<title>Translate a Triangle</title> | |
</head><body onload="main()"> | |
<canvas id="webgl" width="800" height="800"> | |
Please use a browser that supports "canvas" | |
</canvas> | |
<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"> | |
// MultiAttributeColor.js (c) 2012 matsuda | |
// Vertex shader program | |
var VSHADER_SOURCE = | |
'attribute vec4 a_Position;\n' + | |
'attribute vec4 a_Color;\n' + | |
'varying vec4 v_Color;\n' + // varying variable | |
'void main() {\n' + | |
' gl_Position = a_Position;\n' + | |
' gl_PointSize = 10.0;\n' + | |
' v_Color = a_Color;\n' + // Pass the data to the fragment shader | |
'}\n'; | |
// Fragment shader program | |
var FSHADER_SOURCE = | |
'precision mediump float;\n' + // Precision qualifier (See Chapter 6) | |
'varying vec4 v_Color;\n' + // Receive the data from the vertex shader | |
'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; | |
} | |
// | |
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); | |
// Clear <canvas> | |
gl.clear(gl.COLOR_BUFFER_BIT); | |
// Draw three points | |
gl.drawArrays(gl.POINTS, 0, n); | |
} | |
function initVertexBuffers(gl) { | |
var verticesColors = new Float32Array([ | |
// Vertex coordinates and color | |
0.0, 0.5, 1.0, 0.0, 0.0, | |
-0.5, -0.5, 0.0, 1.0, 0.0, | |
0.5, -0.5, 0.0, 0.0, 1.0, | |
]); | |
var n = 3; // The number of vertices | |
// Create a buffer object | |
var vertexColorBuffer = gl.createBuffer(); | |
if (!vertexColorBuffer) { | |
console.log('Failed to create the buffer object'); | |
return false; | |
} | |
// Write the vertex coordinates and colors 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; | |
//Get the storage location of a_Position, assign and enable buffer | |
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, 2, gl.FLOAT, false, FSIZE * 5, 0); | |
gl.enableVertexAttribArray(a_Position); // Enable the assignment of the buffer object | |
// Get the storage location of a_Position, assign buffer and enable | |
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 * 5, FSIZE * 2); | |
gl.enableVertexAttribArray(a_Color); // Enable the assignment of the buffer object | |
return n; | |
} | |
</script> | |
</body></html> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment