Skip to content

Instantly share code, notes, and snippets.

@jdeagle
Created March 1, 2016 23:53
Show Gist options
  • Save jdeagle/c7a1a968795ed981d908 to your computer and use it in GitHub Desktop.
Save jdeagle/c7a1a968795ed981d908 to your computer and use it in GitHub Desktop.
JS Sphere
var planePositions = [];
var r = 1;
m = 3, // u segments
n = 3, // v segments
quads = [];
function getPlaneIndexes () {
var buffer = [];
var points = [],
col = 0, row = 0;
for(var i = 0, l = n * m; i < l; i++) {
points[i] = {
u: col,
v: row
};
col++;
if(col == m) {
col = 0;
row++;
}
}
console.log("points: ", points);
// create quads
for(var i = 0, l = m * n; i < l; i++) {
var point = points[i];
//var offset = 1 + point.row;
if(point.u < (m - 1) && point.v < (n - 1)) {
console.log("get quad for point ", i);
// draw triagles for quad using top left point as origin(i)
// poin1 = i + 1, i, i + m --- OK
// poin2 = i + 1, i + m, i + m + 1
var triA = [i + 1, i, i + m];
var triB = [i + 1, i + m, i + m + 1];
var quad = [triA, triB];
quads.push(quad);
// triA
buffer.push(quad[0][0]);
buffer.push(quad[0][1]);
buffer.push(quad[0][2]);
// triB
buffer.push(quad[1][0]);
buffer.push(quad[1][1]);
buffer.push(quad[1][2]);
}
}
// console.log(quads);
// console.log(buffer);
return {
quads: quads,
points: points,
buffer: buffer
};
}
Math.radians = function(degrees) {
return degrees * (Math.PI / 180);
};
Math.degrees = function(radians) {
return radians * (180 / Math.PI);
};
function drawSphere(points) {
var positionsBuffer = [];
for(var v = 0; v < n; v++) {
//row
for(var u = 0; u < m; u++) {
// column in row
var alpha = (180 / (n - 1)) * v,
alphaRadians = Math.radians(alpha),
beta = (360 / (m)) * u,
betaRadians = Math.radians(beta);
var vec3 = [
r * (Math.sin(alphaRadians) * Math.cos(betaRadians)), // x
r * Math.cos(alphaRadians), // y
r * (Math.sin(alphaRadians) * Math.sin(betaRadians)) // z
];
console.log(v, u, " - a:", alpha, "b:",beta, vec3);
//point.position = vec3;
positionsBuffer.push(vec3[0]);
positionsBuffer.push(vec3[1]);
positionsBuffer.push(vec3[2]);
}
}
console.log("positions", positionsBuffer);
}
var planeInfo = getPlaneIndexes();
drawSphere(planeInfo.points);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment