diff --git a/index.html b/index.html index b8c4fc101a2706dddc767026eea468343e6a77d5..0b2d32ef06bc445274d541d6178f0e22d29a215b 100755 --- a/index.html +++ b/index.html @@ -146,10 +146,10 @@ uniform sampler2D u_originalPosition; uniform sampler2D u_externalForces; uniform sampler2D u_mass; - uniform sampler2D u_meta;//[beamsIndex, numBeam, creaseMeta2Index, numCreases] + uniform sampler2D u_meta;//[beamsIndex, numBeam, nodeCreaseMetaIndex, numCreases] uniform sampler2D u_beamMeta;//[k, d, length, otherNodeIndex] uniform sampler2D u_creaseMeta;//[k, d, targetTheta] - uniform sampler2D u_creaseMeta2;//[creaseIndex, nodeIndex, -, -] + uniform sampler2D u_nodeCreaseMeta;//[creaseIndex, nodeIndex, -, -] uniform sampler2D u_normals; uniform sampler2D u_theta;//[theta, z, normal1Index, normal2Index] uniform sampler2D u_creaseGeo;//[h1, h2, coef1, coef2] @@ -206,9 +206,9 @@ float nodeCreaseIndex1D = meta[2]+float(j); vec2 nodeCreaseIndex = vec2(mod(nodeCreaseIndex1D, u_textureDimNodeCreases.x)+0.5, floor(nodeCreaseIndex1D/u_textureDimNodeCreases.x)+0.5); vec2 scaledNodeCreaseIndex = nodeCreaseIndex/u_textureDimNodeCreases; - vec4 creaseMeta2 = texture2D(u_creaseMeta2, scaledNodeCreaseIndex);//[creaseIndex, length to node, nodeType (1 or 2), isReaction] + vec4 nodeCreaseMeta = texture2D(u_nodeCreaseMeta, scaledNodeCreaseIndex);//[creaseIndex, length to node, nodeType (1 or 2), isReaction] - float creaseIndex1D = creaseMeta2[0]; + float creaseIndex1D = nodeCreaseMeta[0]; vec2 creaseIndex = vec2(mod(creaseIndex1D, u_textureDimCreases.x)+0.5, floor(creaseIndex1D/u_textureDimCreases.x)+0.5); vec2 scaledCreaseIndex = creaseIndex/u_textureDimCreases; @@ -220,7 +220,7 @@ float targetTheta = creaseMeta[2] * u_creasePercent; float angForce = creaseMeta[0]*(targetTheta-thetas[0]);// + creaseMeta[1]*thetas[1]; - float nodeNum = creaseMeta2[1];//1, 2, 3, 4 + float nodeNum = nodeCreaseMeta[1];//1, 2, 3, 4 if (nodeNum > 2.0){//crease reaction, node is on a crease @@ -375,13 +375,13 @@ uniform vec2 u_textureDimCreases; uniform sampler2D u_lastPosition; uniform sampler2D u_originalPosition; - uniform sampler2D u_creaseMeta3; + uniform sampler2D u_creaseMeta2; void main(){ vec2 fragCoord = gl_FragCoord.xy; vec2 scaledFragCoord = fragCoord/u_textureDimCreases; - vec4 creaseMeta = texture2D(u_creaseMeta3, scaledFragCoord); + vec4 creaseMeta = texture2D(u_creaseMeta2, scaledFragCoord); vec2 node1Index = vec2(mod(creaseMeta[0], u_textureDim.x)+0.5, floor(creaseMeta[0]/u_textureDim.x)+0.5)/u_textureDim; vec2 node2Index = vec2(mod(creaseMeta[1], u_textureDim.x)+0.5, floor(creaseMeta[1]/u_textureDim.x)+0.5)/u_textureDim; diff --git a/js/dynamic/dynamicSolver.js b/js/dynamic/dynamicSolver.js index f0e6ec292942251caee7be90b024b519f120d4af..0b4420b9f5a12e05d818f7265ffd79298a234a89 100755 --- a/js/dynamic/dynamicSolver.js +++ b/js/dynamic/dynamicSolver.js @@ -25,9 +25,9 @@ function initDynamicSolver(globals){ var normals; var faceVertexIndices;//[a,b,c] - var creaseMeta;//[k, d, targetTheta] - var creaseMeta2;//[creaseIndex (thetaIndex), nodeIndex (1/2/3/4), -, -] - var creaseMeta3;//[node1Index, node2Index, node3index, node4index]//nodes 1 and 2 are opposite crease, 3 and 4 are on crease + var creaseMeta;//[k, d, targetTheta, -] textureDimCreases + var creaseMeta2;//[node1Index, node2Index, node3index, node4index]//nodes 1 and 2 are opposite crease, 3 and 4 are on crease, textureDimCreases + var nodeCreaseMeta;//[creaseIndex (thetaIndex), nodeIndex (1/2/3/4), -, -] textureDimNodeCreases var creaseGeo;//[h1, h2, coef1, coef2] var creaseVectors;//indices of crease nodes var theta;//[theta, w, normalIndex1, normalIndex2] @@ -129,12 +129,12 @@ function initDynamicSolver(globals){ gpuMath.setProgram("updateCreaseGeo"); //already at textureDimCreasesxtextureDimCreases - gpuMath.step("updateCreaseGeo", ["u_lastPosition", "u_originalPosition", "u_creaseMeta3"], "u_creaseGeo"); + gpuMath.step("updateCreaseGeo", ["u_lastPosition", "u_originalPosition", "u_creaseMeta2"], "u_creaseGeo"); gpuMath.setProgram("velocityCalc"); gpuMath.setSize(textureDim, textureDim); gpuMath.step("velocityCalc", ["u_lastPosition", "u_lastVelocity", "u_originalPosition", "u_externalForces", - "u_mass", "u_meta", "u_beamMeta", "u_creaseMeta", "u_creaseMeta2", "u_normals", "u_theta", "u_creaseGeo"], "u_velocity"); + "u_mass", "u_meta", "u_beamMeta", "u_creaseMeta", "u_nodeCreaseMeta", "u_normals", "u_theta", "u_creaseGeo"], "u_velocity"); gpuMath.step("positionCalc", ["u_velocity", "u_lastPosition", "u_mass"], "u_position"); gpuMath.swapTextures("u_theta", "u_lastTheta"); @@ -264,8 +264,8 @@ function initDynamicSolver(globals){ gpuMath.initFrameBufferForTexture("u_normals", true); gpuMath.initTextureFromData("u_meta", textureDim, textureDim, "FLOAT", meta, true); - gpuMath.initTextureFromData("u_creaseMeta2", textureDimNodeCreases, textureDimNodeCreases, "FLOAT", creaseMeta2, true); - gpuMath.initTextureFromData("u_creaseMeta3", textureDimCreases, textureDimCreases, "FLOAT", creaseMeta3, true); + gpuMath.initTextureFromData("u_nodeCreaseMeta", textureDimNodeCreases, textureDimNodeCreases, "FLOAT", nodeCreaseMeta, true); + gpuMath.initTextureFromData("u_creaseMeta2", textureDimCreases, textureDimCreases, "FLOAT", creaseMeta2, true); gpuMath.initTextureFromData("u_creaseGeo", textureDimCreases, textureDimCreases, "FLOAT", creaseGeo, true); gpuMath.initFrameBufferForTexture("u_creaseGeo", true); gpuMath.initTextureFromData("u_faceVertexIndices", textureDimFaces, textureDimFaces, "FLOAT", faceVertexIndices, true); @@ -285,7 +285,7 @@ function initDynamicSolver(globals){ gpuMath.setUniformForProgram("velocityCalc", "u_meta", 5, "1i"); gpuMath.setUniformForProgram("velocityCalc", "u_beamMeta", 6, "1i"); gpuMath.setUniformForProgram("velocityCalc", "u_creaseMeta", 7, "1i"); - gpuMath.setUniformForProgram("velocityCalc", "u_creaseMeta2", 8, "1i"); + gpuMath.setUniformForProgram("velocityCalc", "u_nodeCreaseMeta", 8, "1i"); gpuMath.setUniformForProgram("velocityCalc", "u_normals", 9, "1i"); gpuMath.setUniformForProgram("velocityCalc", "u_theta", 10, "1i"); gpuMath.setUniformForProgram("velocityCalc", "u_creaseGeo", 11, "1i"); @@ -331,7 +331,7 @@ function initDynamicSolver(globals){ gpuMath.createProgram("updateCreaseGeo", vertexShader, document.getElementById("updateCreaseGeo").text); gpuMath.setUniformForProgram("updateCreaseGeo", "u_lastPosition", 0, "1i"); gpuMath.setUniformForProgram("updateCreaseGeo", "u_originalPosition", 1, "1i"); - gpuMath.setUniformForProgram("updateCreaseGeo", "u_creaseMeta3", 2, "1i"); + gpuMath.setUniformForProgram("updateCreaseGeo", "u_creaseMeta2", 2, "1i"); gpuMath.setUniformForProgram("updateCreaseGeo", "u_textureDim", [textureDim, textureDim], "2f"); gpuMath.setUniformForProgram("updateCreaseGeo", "u_textureDimCreases", [textureDimCreases, textureDimCreases], "2f"); @@ -475,8 +475,8 @@ function initDynamicSolver(globals){ normals = new Float32Array(textureDimFaces*textureDimFaces*4); faceVertexIndices = new Float32Array(textureDimFaces*textureDimFaces*4); creaseMeta = new Float32Array(textureDimCreases*textureDimCreases*4); - creaseMeta2 = new Float32Array(textureDimNodeCreases*textureDimNodeCreases*4); - creaseMeta3 = new Float32Array(textureDimCreases*textureDimCreases*4); + nodeCreaseMeta = new Float32Array(textureDimNodeCreases*textureDimNodeCreases*4); + creaseMeta2 = new Float32Array(textureDimCreases*textureDimCreases*4); creaseGeo = new Float32Array(textureDimCreases*textureDimCreases*4); creaseVectors = new Float32Array(textureDimCreases*textureDimCreases*4); theta = new Float32Array(textureDimCreases*textureDimCreases*4); @@ -512,22 +512,22 @@ function initDynamicSolver(globals){ // console.log(nodeInvCreases); meta[i*4+3] = nodeCreases.length + nodeInvCreases.length; for (var j=0;j<nodeCreases.length;j++){ - creaseMeta2[index*4] = nodeCreases[j].getIndex(); - creaseMeta2[index*4+1] = nodeCreases[j].getNodeIndex(nodes[i]);//type 1, 2, 3, 4 + nodeCreaseMeta[index*4] = nodeCreases[j].getIndex(); + nodeCreaseMeta[index*4+1] = nodeCreases[j].getNodeIndex(nodes[i]);//type 1, 2, 3, 4 index++; } for (var j=0;j<nodeInvCreases.length;j++){ - creaseMeta2[index*4] = nodeInvCreases[j].getIndex(); - creaseMeta2[index*4+1] = nodeInvCreases[j].getNodeIndex(nodes[i]);//type 1, 2, 3, 4 + nodeCreaseMeta[index*4] = nodeInvCreases[j].getIndex(); + nodeCreaseMeta[index*4+1] = nodeInvCreases[j].getNodeIndex(nodes[i]);//type 1, 2, 3, 4 index++; } } for (var i=0;i<creases.length;i++){ var crease = creases[i]; - creaseMeta3[i*4] = crease.node1.getIndex(); - creaseMeta3[i*4+1] = crease.node2.getIndex(); - creaseMeta3[i*4+2] = crease.edge.nodes[0].getIndex(); - creaseMeta3[i*4+3] = crease.edge.nodes[1].getIndex(); + creaseMeta2[i*4] = crease.node1.getIndex(); + creaseMeta2[i*4+1] = crease.node2.getIndex(); + creaseMeta2[i*4+2] = crease.edge.nodes[0].getIndex(); + creaseMeta2[i*4+3] = crease.edge.nodes[1].getIndex(); index++; }