diff options
Diffstat (limited to '_shared/math/line2.js')
| -rw-r--r-- | _shared/math/line2.js | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/_shared/math/line2.js b/_shared/math/line2.js new file mode 100644 index 0000000..8b30c1c --- /dev/null +++ b/_shared/math/line2.js @@ -0,0 +1,63 @@ +/// <reference path="vec2.js" /> +/// <reference path="mat4.js" /> + +/** + * Creates a new line object + * @param {vec2} pStart + * @param {vec2} pEnd + * @param {WebGLRenderingContext} pGl + */ +function line2(pStart, pEnd, pGl, pColor, pMass) { + const lDiffVector = subVec2(pEnd, pStart); + + const lBuffer = pGl.createBuffer(); + pGl.bindBuffer(pGl.ARRAY_BUFFER, lBuffer); + + var lBufferedData = [ + pStart.x, pStart.y, pColor.x, pColor.y, pColor.z, pColor.w, + pEnd.x, pEnd.y, pColor.x, pColor.y, pColor.z, pColor.w + ]; + + pGl.bufferData(pGl.ARRAY_BUFFER, new Float32Array(lBufferedData), pGl.STATIC_DRAW) + pGl.bindBuffer(pGl.ARRAY_BUFFER, undefined); + + var lSlope = (pEnd.y - pStart.y) / (pEnd.x - pStart.x); + + return { + buffer: lBuffer, + start: pStart, + end: pEnd, + slope: lSlope, + normal: normalize2(getPerp2(lDiffVector)), + length: length2(lDiffVector), + mass: pMass, + direction: normalize2(lDiffVector), + velocity: vec2(0, 0), + position: vec2() + }; +} + +function getLine2MomentOfInertia(pLine) { + return (1.0 / 12.0) * pLine.mass * Math.pow(pLine.length, 2); +} + +function getLine2MidPoint(pLine) { + return { + x: (pLine.end.x + pLine.start.x) / 2.0, + y: (pLine.end.y + pLine.start.y) / 2.0 + } +} + +function renderLine2(pGl, pProgramInfo, pLine) { + pGl.uniformMatrix4fv(pProgramInfo.uniformLocations.model, false, mat4()); // Model on a line is always default matrix + pGl.bindBuffer(pGl.ARRAY_BUFFER, pLine.buffer); + { + pGl.enableVertexAttribArray(pProgramInfo.attributeLocations.position); + pGl.vertexAttribPointer(pProgramInfo.attributeLocations.position, 2, pGl.FLOAT, false, BYTES_PER_FLOAT * 6, 0); + + pGl.enableVertexAttribArray(pProgramInfo.attributeLocations.color); + pGl.vertexAttribPointer(pProgramInfo.attributeLocations.color, 4, pGl.FLOAT, false, BYTES_PER_FLOAT * 6, BYTES_PER_FLOAT * 2); + } + + pGl.drawArrays(pGl.LINES, 0, 2); +}
\ No newline at end of file |
