From 9c939b9cd34824321c3c84bbe9f4575b7c1eacdc Mon Sep 17 00:00:00 2001 From: jjungyeun <wjddusdl11@ajou.ac.kr> Date: Mon, 17 Jun 2019 15:20:40 +0900 Subject: [PATCH] =?UTF-8?q?trace=20=EB=82=A8=EA=B8=B0=EA=B8=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Final_Project/final_project.html | 4 +- Final_Project/final_project.js | 329 +++++++++++++++---------------- 2 files changed, 162 insertions(+), 171 deletions(-) diff --git a/Final_Project/final_project.html b/Final_Project/final_project.html index 3c0afd2..d44a565 100644 --- a/Final_Project/final_project.html +++ b/Final_Project/final_project.html @@ -14,7 +14,7 @@ <body onload="main()"> <H2> WebGL - Trace of Cube </H2> Example - Trace of rotating Cube - <br> + <br><br> <canvas id="helloapicanvas" style="border: none;" width="500" height="500"></canvas> <br> @@ -24,7 +24,7 @@ <br> <button onclick="animRotate()">Animation Rotate + 0.01</button> <button onclick="animPause()">Animation Pause</button> - <button onclick="rotateMoonFaster()">Rotate 8 Moons Faster</button> + <br><br> <table border=1> <tr > <td id="matrix0"> <td id="matrix4"> <td id="matrix8"> <td id="matrix12"> diff --git a/Final_Project/final_project.js b/Final_Project/final_project.js index b8b4a79..110fca2 100644 --- a/Final_Project/final_project.js +++ b/Final_Project/final_project.js @@ -34,63 +34,125 @@ function initialiseGL(canvas) { var shaderProgram; +function vertexData(color_a, mode){ + var vertex = []; + if(mode == "color"){ + vertex = [ + -0.5, 0.5, 0.5, 1.0, 1.0, 0.7, color_a, 0.0, 1.0,//3 + 0.5, 0.5, 0.5, 1.0, 1.0, 0.7, color_a, 1.0, 1.0,//1 + 0.5, 0.5, -0.5, 1.0, 1.0, 0.7, color_a, 1.0, 1.0,//2 + + -0.5, 0.5, 0.5, 1.0, 1.0, 0.7, color_a, 0.0, 1.0,//3 + 0.5, 0.5, -0.5, 1.0, 1.0, 0.7, color_a, 1.0, 1.0,//2 + -0.5, 0.5, -0.5, 1.0, 1.0, 0.7, color_a, 0.0, 1.0,//4 + + 0.5, 0.5, -0.5, 0.0, 0.5, 0.0, color_a, 1.0, 1.0,//2 + 0.5, -0.5, -0.5, 0.0, 0.5, 0.0, color_a, 1.0, 0.0,//6 + -0.5,-0.5,-0.5, 0.0, 0.5, 0.0, color_a, 0.0, 0.0,//8 + + -0.5, 0.5, -0.5, 0.0, 0.5, 0.0, color_a, 0.0, 1.0,//4 + 0.5, 0.5, -0.5, 0.0, 0.5, 0.0, color_a, 1.0, 1.0,//2 + -0.5,-0.5,-0.5, 0.0, 0.5, 0.0, color_a, 0.0, 0.0,//8 + + 0.5, -0.5, 0.5, 1.0, 0.5, 0.0, color_a, 0.0, 1.0,//5 + 0.5, -0.5, -0.5, 1.0, 0.5, 0.0, color_a, 0.0, 1.0,//6 + 0.5, 0.5, -0.5, 1.0, 0.5, 0.0, color_a, 1.0, 1.0,//2 + + 0.5, -0.5, 0.5, 1.0, 0.5, 0.0, color_a, 0.0, 1.0,//5 + 0.5, 0.5, -0.5, 1.0, 0.5, 0.0, color_a, 1.0, 1.0,//2 + 0.5, 0.5, 0.5, 1.0, 0.5, 0.0, color_a, 1.0, 1.0,//1 + + -0.5, 0.5, -0.5, 1.0, 0.0, 0.0, color_a, 0.0, 1.0,//4 + -0.5,-0.5, -0.5, 1.0, 0.0, 0.0, color_a, 0.0, 0.0,//8 + -0.5, -0.5, 0.5, 1.0, 0.0, 0.0, color_a, 0.0, 0.0,//7 + + -0.5, 0.5, 0.5, 1.0, 0.0, 0.0, color_a, 0.0, 1.0,//3 + -0.5, 0.5, -0.5, 1.0, 0.0, 0.0, color_a, 0.0, 1.0,//4 + -0.5, -0.5, 0.5, 1.0, 0.0, 0.0, color_a, 0.0, 0.0,//7 + + -0.5, -0.5, 0.5, 0.0, 0.0, 1.0, color_a, 0.0, 0.0,//7 + 0.5, -0.5, 0.5, 0.0, 0.0, 1.0, color_a, 1.0, 0.0,//5 + 0.5, 0.5, 0.5, 0.0, 0.0, 1.0, color_a, 1.0, 1.0,//1 + + -0.5, -0.5, 0.5, 0.0, 0.0, 1.0, color_a, 0.0, 0.0,//7 + 0.5, 0.5, 0.5, 0.0, 0.0, 1.0, color_a, 1.0, 1.0,//1 + -0.5, 0.5, 0.5, 0.0, 0.0, 1.0, color_a, 0.0, 1.0,//3 + + 0.5, -0.5, -0.5, 0.0, 1.0, 0.0, color_a, 1.0, 0.0,//6 + 0.5, -0.5, 0.5, 0.0, 1.0, 0.0, color_a, 1.0, 0.0,//5 + -0.5, -0.5, 0.5, 0.0, 1.0, 0.0, color_a, 0.0, 0.0,//7 + + -0.5,-0.5, -0.5, 0.0, 1.0, 0.0, color_a, 0.0, 0.0,//8 + 0.5, -0.5, -0.5, 0.0, 1.0, 0.0, color_a, 1.0, 0.0,//6 + -0.5, -0.5, 0.5, 0.0, 1.0, 0.0, color_a, 0.0, 0.0,//7 + ]; + } else{ + var color; + if(mode == "white") + color = 1.0; + else if(mode == "gray") + color = 0.4; + vertex = [ + -0.5, 0.5, 0.5, color, color, color, color_a, 0.0, 1.0,//3 + 0.5, 0.5, 0.5, color, color, color, color_a, 1.0, 1.0,//1 + 0.5, 0.5, -0.5, color, color, color, color_a, 1.0, 1.0,//2 + + -0.5, 0.5, 0.5, color, color, color, color_a, 0.0, 1.0,//3 + 0.5, 0.5, -0.5, color, color, color, color_a, 1.0, 1.0,//2 + -0.5, 0.5, -0.5, color, color, color, color_a, 0.0, 1.0,//4 + + 0.5, 0.5, -0.5, color, color, color, color_a, 1.0, 1.0,//2 + 0.5, -0.5, -0.5, color, color, color, color_a, 1.0, 0.0,//6 + -0.5,-0.5,-0.5, color, color, color, color_a, 0.0, 0.0,//8 + + -0.5, 0.5, -0.5, color, color, color, color_a, 0.0, 1.0,//4 + 0.5, 0.5, -0.5, color, color, color, color_a, 1.0, 1.0,//2 + -0.5,-0.5,-0.5, color, color, color, color_a, 0.0, 0.0,//8 + + 0.5, -0.5, 0.5, color, color, color, color_a, 0.0, 1.0,//5 + 0.5, -0.5, -0.5, color, color, color, color_a, 0.0, 1.0,//6 + 0.5, 0.5, -0.5, color, color, color, color_a, 1.0, 1.0,//2 + + 0.5, -0.5, 0.5, color, color, color, color_a, 0.0, 1.0,//5 + 0.5, 0.5, -0.5, color, color, color, color_a, 1.0, 1.0,//2 + 0.5, 0.5, 0.5, color, color, color, color_a, 1.0, 1.0,//1 + + -0.5, 0.5, -0.5, color, color, color, color_a, 0.0, 1.0,//4 + -0.5,-0.5, -0.5, color, color, color, color_a, 0.0, 0.0,//8 + -0.5, -0.5, 0.5, color, color, color, color_a, 0.0, 0.0,//7 + + -0.5, 0.5, 0.5, color, color, color, color_a, 0.0, 1.0,//3 + -0.5, 0.5, -0.5, color, color, color, color_a, 0.0, 1.0,//4 + -0.5, -0.5, 0.5, color, color, color, color_a, 0.0, 0.0,//7 + + -0.5, -0.5, 0.5, color, color, color, color_a, 0.0, 0.0,//7 + 0.5, -0.5, 0.5, color, color, color, color_a, 1.0, 0.0,//5 + 0.5, 0.5, 0.5, color, color, color, color_a, 1.0, 1.0,//1 + + -0.5, -0.5, 0.5, color, color, color, color_a, 0.0, 0.0,//7 + 0.5, 0.5, 0.5, color, color, color, color_a, 1.0, 1.0,//1 + -0.5, 0.5, 0.5, color, color, color, color_a, 0.0, 1.0,//3 + + 0.5, -0.5, -0.5, color, color, color, color_a, 1.0, 0.0,//6 + 0.5, -0.5, 0.5, color, color, color, color_a, 1.0, 0.0,//5 + -0.5, -0.5, 0.5, color, color, color, color_a, 0.0, 0.0,//7 + + -0.5,-0.5, -0.5, color, color, color, color_a, 0.0, 0.0,//8 + 0.5, -0.5, -0.5, color, color, color, color_a, 1.0, 0.0,//6 + -0.5, -0.5, 0.5, color, color, color, color_a, 0.0, 0.0,//7 + ]; + } + + return vertex; +} + + function initialiseBuffer() { - - var vertexData = [ - -0.5, 0.5, 0.5, 1.0, 1.0, 1.0, 0.5, 0.0, 1.0,//3 - 0.5, 0.5, 0.5, 1.0, 1.0, 1.0, 0.5, 1.0, 1.0,//1 - 0.5, 0.5, -0.5, 1.0, 1.0, 1.0, 0.5, 1.0, 1.0,//2 - - -0.5, 0.5, 0.5, 1.0, 1.0, 1.0, 0.5, 0.0, 1.0,//3 - 0.5, 0.5, -0.5, 1.0, 1.0, 1.0, 0.5, 1.0, 1.0,//2 - -0.5, 0.5, -0.5, 1.0, 1.0, 1.0, 0.5, 0.0, 1.0,//4 - - 0.5, 0.5, -0.5, 0.0, 0.0, 0.0, 0.5, 1.0, 1.0,//2 - 0.5, -0.5, -0.5, 0.0, 0.0, 0.0, 0.5, 1.0, 0.0,//6 - -0.5,-0.5,-0.5, 0.0, 0.0, 0.0, 0.5, 0.0, 0.0,//8 - - -0.5, 0.5, -0.5, 0.0, 0.0, 0.0, 0.5, 0.0, 1.0,//4 - 0.5, 0.5, -0.5, 0.0, 0.0, 0.0, 0.5, 1.0, 1.0,//2 - -0.5,-0.5,-0.5, 0.0, 0.0, 0.0, 0.5, 0.0, 0.0,//8 - - 0.5, -0.5, 0.5, 1.0, 0.5, 0.0, 0.5, 0.0, 1.0,//5 - 0.5, -0.5, -0.5, 1.0, 0.5, 0.0, 0.5, 0.0, 1.0,//6 - 0.5, 0.5, -0.5, 1.0, 0.5, 0.0, 0.5, 1.0, 1.0,//2 - - 0.5, -0.5, 0.5, 1.0, 0.5, 0.0, 0.5, 0.0, 1.0,//5 - 0.5, 0.5, -0.5, 1.0, 0.5, 0.0, 0.5, 1.0, 1.0,//2 - 0.5, 0.5, 0.5, 1.0, 0.5, 0.0, 0.5, 1.0, 1.0,//1 - - -0.5, 0.5, -0.5, 1.0, 0.0, 0.0, 0.5, 0.0, 1.0,//4 - -0.5,-0.5, -0.5, 1.0, 0.0, 0.0, 0.5, 0.0, 0.0,//8 - -0.5, -0.5, 0.5, 1.0, 0.0, 0.0, 0.5, 0.0, 0.0,//7 - - -0.5, 0.5, 0.5, 1.0, 0.0, 0.0, 0.5, 0.0, 1.0,//3 - -0.5, 0.5, -0.5, 1.0, 0.0, 0.0, 0.5, 0.0, 1.0,//4 - -0.5, -0.5, 0.5, 1.0, 0.0, 0.0, 0.5, 0.0, 0.0,//7 - - -0.5, -0.5, 0.5, 0.0, 0.0, 1.0, 0.5, 0.0, 0.0,//7 - 0.5, -0.5, 0.5, 0.0, 0.0, 1.0, 0.5, 1.0, 0.0,//5 - 0.5, 0.5, 0.5, 0.0, 0.0, 1.0, 0.5, 1.0, 1.0,//1 - - -0.5, -0.5, 0.5, 0.0, 0.0, 1.0, 0.5, 0.0, 0.0,//7 - 0.5, 0.5, 0.5, 0.0, 0.0, 1.0, 0.5, 1.0, 1.0,//1 - -0.5, 0.5, 0.5, 0.0, 0.0, 1.0, 0.5, 0.0, 1.0,//3 - - 0.5, -0.5, -0.5, 0.0, 1.0, 0.0, 0.5, 1.0, 0.0,//6 - 0.5, -0.5, 0.5, 0.0, 1.0, 0.0, 0.5, 1.0, 0.0,//5 - -0.5, -0.5, 0.5, 0.0, 1.0, 0.0, 0.5, 0.0, 0.0,//7 - - -0.5,-0.5, -0.5, 0.0, 1.0, 0.0, 0.5, 0.0, 0.0,//8 - 0.5, -0.5, -0.5, 0.0, 1.0, 0.0, 0.5, 1.0, 0.0,//6 - -0.5, -0.5, 0.5, 0.0, 1.0, 0.0, 0.5, 0.0, 0.0,//7 - ]; - // Generate a buffer object gl.vertexBuffer = gl.createBuffer(); // Bind buffer as a vertex buffer so we can fill it with data gl.bindBuffer(gl.ARRAY_BUFFER, gl.vertexBuffer); - gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(vertexData), gl.STATIC_DRAW); + gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(vertexData(1.0, "color")), gl.STATIC_DRAW); return testGLError("initialiseBuffers"); } @@ -114,7 +176,7 @@ function initialiseShaders() { var vertexShaderSource = '\ attribute highp vec3 myVertex; \ attribute highp vec4 myColor; \ - attribute highp vec2 myUV; \ + attribute highp vec2 myUV; \ uniform mediump mat4 Pmatrix; \ uniform mediump mat4 Vmatrix; \ uniform mediump mat4 Mmatrix; \ @@ -145,10 +207,10 @@ function initialiseShaders() { gl.attachShader(gl.programObject, gl.fragShader); gl.attachShader(gl.programObject, gl.vertexShader); - // Bind the custom vertex attribute "myVertex" to location 0 + // Bind the custom vertex attribute gl.bindAttribLocation(gl.programObject, 0, "myVertex"); gl.bindAttribLocation(gl.programObject, 1, "myColor"); - gl.bindAttribLocation(gl.programObject, 2, "myUV"); + gl.bindAttribLocation(gl.programObject, 2, "myUV"); // Link the program gl.linkProgram(gl.programObject); @@ -173,14 +235,13 @@ function get_projection(angle, a, zMin, zMax) { 0, 0, (-2*zMax*zMin)/(zMax-zMin), 0 ]; } -var proj_matrix = get_projection(70, 1.0, 0, 5.0); +var proj_matrix = get_projection(30, 1.0, 0, 5.0); var mov_matrix = [1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,1]; var view_matrix = [1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,1]; view_matrix[14] = view_matrix[14]-2;//zoom rotValue = 0.0; -rotRatio = 1.0; animRotValue = 0.0; transX = 0.0; transY = 0.0; transZ = 0.0; frames = 1; @@ -192,7 +253,6 @@ function animRotate() function animPause(){ animRotValue = 0.0; - rotRatio = 1.0; } function trXinc() // translate X increase @@ -213,26 +273,27 @@ function trZinc() // translate Z increase document.getElementById("webTrZ").innerHTML = "transZ : " + transZ.toFixed(4); } -function rotateMoonFaster(){ - rotRatio += 0.1; +var trace = []; +var traceNum = 30; +var traceFreq = 3; +var trace_alpha = 0.05; + +function addTrace(mat){ + if(trace.length>=traceNum){ + trace = trace.slice(1,traceNum); + } + trace.push(mat); } function renderScene() { - //console.log("Frame "+frames+"\n"); + // console.log("Frame "+frames+"\n"); frames += 1 ; - rotAxis = [1,1,0]; + rotAxis = [0,-1,0]; // 결정할 수 있게 만들기 (check box로 선택) var locPmatrix = gl.getUniformLocation(gl.programObject, "Pmatrix"); var locVmatrix = gl.getUniformLocation(gl.programObject, "Vmatrix"); var locMmatrix = gl.getUniformLocation(gl.programObject, "Mmatrix"); - - // // postscript처럼 순서 거꾸로 실행됨 - // // translate -> rotate - // idMatrix(mov_matrix); - // rotateArbAxis(mov_matrix, rotValue, rotAxis); - // rotValue += animRotValue; - // translate(mov_matrix, transX, 0.0, 0.0); // uniform으로 GPU한테 던져줌 gl.uniformMatrix4fv(locPmatrix, false, proj_matrix); @@ -242,126 +303,56 @@ function renderScene() { if (!testGLError("gl.uniformMatrix4fv")) { return false; } + gl.enable(gl.DEPTH_TEST); + gl.depthFunc(gl.LEQUAL); + gl.enable(gl.CULL_FACE); // 이거(Culling) 켜면 뒷면 안그림 + gl.enable(gl.BLEND); + gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA); + gl.blendEquation(gl.FUNC_ADD); + gl.clearColor(0.6, 0.8, 1.0, 1.0); // 배경색 설정 + gl.clearDepth(1.0); + gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT); - gl.enableVertexAttribArray(0); + gl.enableVertexAttribArray(0); // 좌표 gl.vertexAttribPointer(0, 3, gl.FLOAT, gl.FALSE, 36, 0); - gl.enableVertexAttribArray(1); + gl.enableVertexAttribArray(1); // color gl.vertexAttribPointer(1, 4, gl.FLOAT, gl.FALSE, 36, 12); - gl.enableVertexAttribArray(2); + gl.enableVertexAttribArray(2); // texture gl.vertexAttribPointer(2, 2, gl.FLOAT, gl.FALSE, 36, 28); - if (!testGLError("gl.vertexAttribPointer")) { return false; } - // gl.enable(gl.DEPTH_TEST); - // gl.depthFunc(gl.LEQUAL); - // gl.enable(gl.CULL_FACE); // 이거(Culling) 켜면 뒷면 안그림 - gl.enable(gl.BLEND); - gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA); - // gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA : source가 dest 위로(source over destination) - // gl.ONE_MINUS_DST_ALPHA, gl.DST_ALPHA : dest가 source 위로(destination over source) - gl.blendEquation(gl.FUNC_ADD); - - gl.clearColor(0.6, 0.8, 1.0, 1.0); // 배경색 설정 - gl.clearDepth(1.0); - gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT); // Earth glMatrix.mat4.identity(mov_matrix); - // var ddd = vec3(transX, transY, transZ); - // mov_matrix = fromTranslation(mov_matrix,ddd); + glMatrix.mat4.rotate(mov_matrix,mov_matrix,rotValue, rotAxis); glMatrix.mat4.translate(mov_matrix, mov_matrix, [transX,transY,transZ]); - glMatrix.mat4.rotate(mov_matrix,mov_matrix,rotValue, rotAxis) rotValue += animRotValue; gl.uniformMatrix4fv(locMmatrix, false, mov_matrix); - gl.drawArrays(gl.TRIANGLES, 0, 36); - // gsave - // mov_matrix의 주소를 복사하는 것이 아닌 행렬을 복사 var mov_matrix_child = mov_matrix.slice(); + addTrace(mov_matrix_child); + + // draw trace of cube + color_a = 1.0; + for (var i = trace.length -1; i>=0;i-=traceFreq){ + color_a -= trace_alpha; + gl.bindBuffer(gl.ARRAY_BUFFER, gl.vertexBuffer); + gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(vertexData(color_a, "gray")), gl.STATIC_DRAW); + gl.uniformMatrix4fv(locMmatrix, false, trace[i].slice()); + if (color_a > 0.0) + gl.drawArrays(gl.TRIANGLES, 0, 36); + } - moonRotValue = rotValue * rotRatio; - // console.log("moonRotValue: "+moonRotValue); - - // 1st moon - glMatrix.mat4.translate(mov_matrix, mov_matrix, [0.75,0.75,0.75]); - glMatrix.mat4.scale(mov_matrix, mov_matrix, [0.25, 0.25, 0.25]); - glMatrix.mat4.rotateY(mov_matrix,mov_matrix, rotValue); - gl.uniformMatrix4fv(locMmatrix, false, mov_matrix); - gl.drawArrays(gl.TRIANGLES, 0, 36); - - // grestore - mov_matrix = mov_matrix_child.slice(); - - // 2nd moon - glMatrix.mat4.translate(mov_matrix, mov_matrix, [-0.75,-0.75,-0.75]); - glMatrix.mat4.scale(mov_matrix, mov_matrix, [0.25, 0.25, 0.25]); - glMatrix.mat4.rotateX(mov_matrix,mov_matrix, moonRotValue*2); - gl.uniformMatrix4fv(locMmatrix, false, mov_matrix); - gl.drawArrays(gl.TRIANGLES, 0, 36); - - // grestore - mov_matrix = mov_matrix_child.slice(); - - // 3rd moon - glMatrix.mat4.translate(mov_matrix, mov_matrix, [0.75,-0.75,-0.75]); - glMatrix.mat4.scale(mov_matrix, mov_matrix, [0.25, 0.25, 0.25]); - glMatrix.mat4.rotateY(mov_matrix,mov_matrix, moonRotValue*3); - gl.uniformMatrix4fv(locMmatrix, false, mov_matrix); - gl.drawArrays(gl.TRIANGLES, 0, 36); - - // grestore - mov_matrix = mov_matrix_child.slice(); - - // 4th moon - glMatrix.mat4.translate(mov_matrix, mov_matrix, [-0.75,0.75,-0.75]); - glMatrix.mat4.scale(mov_matrix, mov_matrix, [0.25, 0.25, 0.25]); - glMatrix.mat4.rotateZ(mov_matrix,mov_matrix, moonRotValue*4); - gl.uniformMatrix4fv(locMmatrix, false, mov_matrix); - gl.drawArrays(gl.TRIANGLES, 0, 36); - - // grestore - mov_matrix = mov_matrix_child.slice(); - - // 5th moon - glMatrix.mat4.translate(mov_matrix, mov_matrix, [-0.75,-0.75,0.75]); - glMatrix.mat4.scale(mov_matrix, mov_matrix, [0.25, 0.25, 0.25]); - glMatrix.mat4.rotateX(mov_matrix,mov_matrix, moonRotValue*5); - gl.uniformMatrix4fv(locMmatrix, false, mov_matrix); - gl.drawArrays(gl.TRIANGLES, 0, 36); - - // grestore - mov_matrix = mov_matrix_child.slice(); - - // 6th moon - glMatrix.mat4.translate(mov_matrix, mov_matrix, [0.75,0.75,-0.75]); - glMatrix.mat4.scale(mov_matrix, mov_matrix, [0.25, 0.25, 0.25]); - glMatrix.mat4.rotateZ(mov_matrix,mov_matrix, moonRotValue*6); - gl.uniformMatrix4fv(locMmatrix, false, mov_matrix); - gl.drawArrays(gl.TRIANGLES, 0, 36); - - // grestore - mov_matrix = mov_matrix_child.slice(); - - // 7th moon - glMatrix.mat4.translate(mov_matrix, mov_matrix, [0.75,-0.75,0.75]); - glMatrix.mat4.scale(mov_matrix, mov_matrix, [0.25, 0.25, 0.25]); - glMatrix.mat4.rotateY(mov_matrix,mov_matrix, moonRotValue*7); - gl.uniformMatrix4fv(locMmatrix, false, mov_matrix); - gl.drawArrays(gl.TRIANGLES, 0, 36); - - // grestore - mov_matrix = mov_matrix_child.slice(); - - // 8th moon - glMatrix.mat4.translate(mov_matrix, mov_matrix, [-0.75,0.75,0.75]); - glMatrix.mat4.scale(mov_matrix, mov_matrix, [0.25, 0.25, 0.25]); - glMatrix.mat4.rotateX(mov_matrix,mov_matrix, moonRotValue*8); - gl.uniformMatrix4fv(locMmatrix, false, mov_matrix); + // original cube + gl.bindBuffer(gl.ARRAY_BUFFER, gl.vertexBuffer); + gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(vertexData(1.0, "color")), gl.STATIC_DRAW); + gl.uniformMatrix4fv(locMmatrix, false, trace[trace.length -1].slice()); gl.drawArrays(gl.TRIANGLES, 0, 36); + // 회전 수치 표 document.getElementById("matrix0").innerHTML = mov_matrix[0].toFixed(4); document.getElementById("matrix1").innerHTML = mov_matrix[1].toFixed(4); document.getElementById("matrix2").innerHTML = mov_matrix[2].toFixed(4); -- GitLab