///
///
/**
* 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);
}