diff --git a/script_step1.txt b/script_step1.txt new file mode 100644 index 0000000000000000000000000000000000000000..6fe0a34672f2e4425125e081c1141bc1c5e7ad6a --- /dev/null +++ b/script_step1.txt @@ -0,0 +1,220 @@ +var gl; + +var shaderProgram; + +function initialStep(canvas) { + + try { + gl = canvas.getContext("webgl") + if (!gl) { + gl = canvas.getContext("experimental-webgl"); + } + gl.viewport(0, 0, canvas.width, canvas.height); + } + + catch (e) { + } + +} + +function createCubePos(sx, sy, sz){ + var x = sx/2; + var y = sy/2; + var z = sz/2; + +/* +square vertex value (x,y,z,R,G,B,alpha) upper: yellow +1 -x, -y, -z 7 -------- 6 +2 x, y, -z /| /| back: orange +3 -x, y, -z 3/_|_____ 2/ | +4 x, -y, -z | | | | right: red +5 -x, -y, z left: green | | (O) | | +6 x, y, z | /(5)----|-/8 +7 -x, y, z front: purple |/_______ |/ +8 x, -y, z 1 4 + below: blue +*/ + var vertexArray = [ + -x, -y, -z, 0.37, 0, 1, 1, // vertex 1,2,3 + x, y, -z, 0.37, 0, 1, 1, // color: purple + -x, y, -z, 0.37, 0, 1, 1, // front square #1 triangle vertex + // --------------------------------------- + -x, -y, -z, 0.37, 0, 1, 1, // vertex 1,4,2 + x, -y, -z, 0.37, 0, 1, 1, // color: purple + x, y, -z, 0.37, 0, 1, 1, // front square #2 triangle vertex + // --------------------------------------- + -x, y, z, 1, 0.37, 0, 1, // vertex 7,6,5 + x, y, z, 1, 0.37, 0, 1, // color: orange + -x, -y, z, 1, 0.37, 0, 1, // back square #1 triangle vertex + // --------------------------------------- + x, y, z, 1, 0.37, 0, 1, // vertex 6,8,5 + x, -y, z, 1, 0.37, 0, 1, // color: orange + -x, -y, z, 1, 0.37, 0, 1, // back square #2 triangle vertex + // --------------------------------------- + x, y, -z, 0.11, 0.86, 0.09, 1, // vertex 2,4,6 + x, -y, -z, 0.11, 0.86, 0.09, 1, // color: red + x, y, z, 0.11, 0.86, 0.09, 1, // right square #1 triangle vertex + // --------------------------------------- + x, -y, -z, 0.11, 0.86, 0.09, 1, // vertex 4,8,6 + x, -y, z, 0.11, 0.86, 0.09, 1, // color: red + x, y, z, 0.11, 0.86, 0.09, 1, // right square #2 triangle vertex + // --------------------------------------- + x, y, -z, 1, 0.89, 0, 1, // vertex 2,6,3 + x, y, z, 1, 0.89, 0, 1, // color: yellow + -x, y, -z, 1, 0.89, 0, 1, // upper square #1 triangle vertex + // --------------------------------------- + -x, y, -z, 1, 0.89, 0, 1, // vertex 3,6,7 + x, y, z, 1, 0.89, 0, 1, // color: yellow + -x, y, z, 1, 0.89, 0, 1, // upper square #2 triangle vertex + // --------------------------------------- + -x, -y, -z, 1, 0, 0, 1, // vertex 1,5,7 + -x, -y, z, 1, 0, 0, 1, // color: green + -x, y, z, 1, 0, 0, 1, // left square #1 trianlge vertex + // --------------------------------------- + -x, -y, -z, 1, 0, 0, 1, // vertex 1,7,3 + -x, y, z, 1, 0, 0, 1, // color: green + -x, y, -z, 1, 0, 0, 1, // left square #2 triangle vertex + // --------------------------------------- + -x, -y, -z, 0, 0.85, 1, 1, // vertex 1,4,8 + x, -y, -z, 0, 0.85, 1, 1, // color: blue + x, -y, z, 0, 0.85, 1, 1, // lower square #1 triangle vertex + // --------------------------------------- + -x, -y, -z, 0, 0.85, 1, 1, // vertex 1,8,5 + x, -y, z, 0, 0.85, 1, 1, // color: blue + -x, -y, z, 0, 0.85, 1, 1 // lower square #2 triangle vertex + ]; + + return vertexArray; +} + + +function getBuffer() { + + gl.vertexBuffer = gl.createBuffer(); + gl.bindBuffer(gl.ARRAY_BUFFER, gl.vertexBuffer); + vertexData = createCubePos(1.5, 1.5, 1.5); + gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(vertexData), gl.STATIC_DRAW); +} + +function getShaders() { + + var vertexShaderSourceText = '\ + attribute highp vec4 vertexPosition; \ + attribute highp vec4 vertexColor; \ + uniform mediump mat4 wldmat; \ + uniform mediump mat4 viwmat;\ + uniform mediump mat4 prjmat;\ + varying highp vec4 fragmentColor;\ + void main(void) \ + { \ + gl_Position = prjmat * viwmat * wldmat * vertexPosition; \ + fragmentColor = vertexColor; \ + }'; + + gl.vertexShader = gl.createShader(gl.VERTEX_SHADER); + gl.shaderSource(gl.vertexShader, vertexShaderSourceText); + gl.compileShader(gl.vertexShader); + + var fragmentShaderSourceText = '\ + varying highp vec4 fragmentColor; \ + void main(void) \ + { \ + gl_FragColor = fragmentColor;\ + }'; + + gl.fragShader = gl.createShader(gl.FRAGMENT_SHADER); + gl.shaderSource(gl.fragShader, fragmentShaderSourceText); + gl.compileShader(gl.fragShader); + + + + gl.programObject = gl.createProgram(); + gl.attachShader(gl.programObject, gl.fragShader); + gl.attachShader(gl.programObject, gl.vertexShader); + gl.bindAttribLocation(gl.programObject, 0, "vertexPosition"); + gl.bindAttribLocation(gl.programObject, 1, "vertexColor"); + + gl.linkProgram(gl.programObject); + gl.useProgram(gl.programObject); + +} + +// var angle = 0; + + var idtmat = new Float32Array(16); + +function renderScene() { + + gl.clearColor(0.85, 0.85, 1, 1.0); + gl.clearDepth(1.0); + gl.clear(gl.DEPTH_BUFFER_BIT); + gl.clear(gl.COLOR_BUFFER_BIT); + gl.enable(gl.DEPTH_TEST); + + + var wldmatLoc = gl.getUniformLocation(gl.programObject, "wldmat"); + var viwmatLoc = gl.getUniformLocation(gl.programObject, "viwmat"); + var prjmatLoc = gl.getUniformLocation(gl.programObject, "prjmat"); + + var wldmatrix = new Float32Array(16); + var viwmatrix = new Float32Array(16); + var prjmatrix = new Float32Array(16); + + //var rotx = new Float32Array(16); + //var roty = new Float32Array(16); + //var rotz = new Float32Array(16); + + mat4.identity(wldmatrix); + mat4.lookAt(viwmatrix, [0,0,-5], [0,0,0], [0,1,0]); + mat4.perspective(prjmatrix, 3.14/4.0, canvas.width/canvas.height, 0.1, 1000); + + angle = performance.now()/5000*Math.PI; + mat4.identity(idtmat); + + //mat4.rotate(rotx, idtmat, angle, [-5,5,-5]); + //mat4.rotate(roty, idtmat, angle, [0,5,0]); + //mat4.rotate(rotz, idtmat, angle, [0,0,5]); + //mat4.mul(wldmatrix, rotx, roty); + //mat4.mul(wldmatrix, wldmatrix, rotz); + + gl.uniformMatrix4fv(wldmatLoc, gl.FALSE, wldmatrix); + gl.uniformMatrix4fv(viwmatLoc, gl.FALSE, viwmatrix); + gl.uniformMatrix4fv(prjmatLoc, gl.FALSE, prjmatrix); + + gl.bindBuffer(gl.ARRAY_BUFFER, gl.vertexBuffer); + gl.enableVertexAttribArray(0); + gl.vertexAttribPointer(0, 3, gl.FLOAT, gl.FALSE, 28, 0); + gl.enableVertexAttribArray(1); + gl.vertexAttribPointer(1, 4, gl.FLOAT, gl.FALSE, 28, 12); + gl.drawArrays(gl.TRIANGLES, 0, 36); + + return true; + +} + + + +function main() { + var canvas = document.getElementById("canvas"); + + initialStep(canvas); + + getBuffer(); + + getShaders(); + + requestAnimFrame = (function () { + return window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || + function (callback) { + window.setTimeout(callback, 1000, 60); + }; + })(); + + (function renderLoop() { + if (renderScene()) { + requestAnimFrame(renderLoop); + } + })(); + + +}