summaryrefslogtreecommitdiff
path: root/_shared/math/line2.js
diff options
context:
space:
mode:
Diffstat (limited to '_shared/math/line2.js')
-rw-r--r--_shared/math/line2.js63
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