I created sphere before. My way is, generated all longitude points according to the latitude points. Then, store these points in longitude order for drawing longitude lines, store these points in latitude order for drawing latitude lines. So actually all the points will be use two times.
This is the way i created all the points first.
for(var latNumber = 0; latNumber <= latitudeBands; latNumber ++)
{
var theta2 = latNumber * Math.PI / latitudeBands;
var sinTheta = Math.sin(theta2);
var cosTheta = Math.cos(theta2);
for(var longNumber = 0; longNumber <= longitudeBands; longNumber ++)
{
var phi2 = longNumber * 2 * Math.PI / longitudeBands;
var sinPhi = Math.sin(phi2);
var cosPhi = Math.cos(phi2);
var x = cosPhi * sinTheta;
var y = cosTheta;
var z = sinPhi * sinTheta;
var points=vec4(radiusSphere * x,radiusSphere * y,radiusSphere * z,1);
vertexPositionData.push(points);
}
}
Then i store all the latitude points and all the longitude points.
for(var latNumber = 0; latNumber < latitudeBands; latNumber ++)
{
for(var longNumber = 0; longNumber <= longitudeBands; longNumber ++)
{
pointsArray.push(vertexPositionData[(latNumber*(longitudeBands+1))+longNumber]);
colorsArray.push(sphereColor);
}
}
for(var latNumber = 0; latNumber < latitudeBands; latNumber ++)
{
for(var longNumber = 0; longNumber <= longitudeBands; longNumber ++)
{
pointsArray.push(vertexPositionData[(longNumber*(latitudeBands+1))+latNumber]);
colorsArray.push(sphereColor);
}
}
Then i connect all the latitude points into circle. same as longitude points.
for(var i=0; i<=latitudeBands; i++)
gl.drawArrays( gl.LINE_STRIP, i*(longitudeBands+1),longitudeBands+1);
offset = latitudeBands*(longitudeBands+1);
for(var j=0; j<=longitudeBands; j++)
gl.drawArrays( gl.LINE_STRIP, j*(latitudeBands+1)+offset,latitudeBands+1);
This is not a best way to draw shpere. but it can successfully draw sphere.
This is the picture i have.
