Created
March 1, 2016 23:53
-
-
Save jdeagle/c7a1a968795ed981d908 to your computer and use it in GitHub Desktop.
JS Sphere
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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