Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- export function ColoredSphere(gl: WebGL2RenderingContext, verticalResolution: number=32, horizontalResolution: number=32): Mesh{
- // TODO: Create a colored sphere mesh and return it
- let mesh = createMesh(gl);
- let data = new Array(horizontalResolution);
- let color_data = new Array(horizontalResolution);
- let elements_data = new Array(horizontalResolution);
- for(var i: number; i<horizontalResolution; i++) {
- var longSeg = Math.PI * (-1+2*i/horizontalResolution); //Mapping the longSeg from -PI to PI
- //data[i] = new Array(verticalResolution);
- for(var j=0; j<verticalResolution; j++) {
- var latSeg = Math.PI * (-1+2*i/horizontalResolution)/2; //Mapping latSeg to (-PI/2 to PI/2)
- var x:number = Math.sin(latSeg) * Math.cos(longSeg);
- var y:number = Math.sin(latSeg) * Math.sin(longSeg);
- var z:number = Math.cos(latSeg);
- data[i].push([x,y,z,1.0]);
- color_data[i].push(colorArr[i%8]);
- }
- }
- for (let i:number = 0; i < latSeg; ++i) {
- for (let j = 0; j < longSeg; ++j) {
- let first = (i * (j + 1)) + j;
- let second = first + longSeg + 1;
- elements_data.push(first);
- elements_data.push(second);
- elements_data.push(first + 1);
- elements_data.push(second);
- elements_data.push(second + 1);
- elements_data.push(first + 1);
- }
- }
- let positions: Array<number> = data.flat();
- let colors: Array<number> = color_data.flat();
- let elements: Array<number> = elements_data.flat();
- mesh.setBufferData("positions", new Float32Array(positions), gl.STATIC_DRAW);
- mesh.setBufferData("colors", new Uint8Array(colors), gl.STATIC_DRAW);
- mesh.setElementsData(new Uint32Array(elements), gl.STATIC_DRAW);
- return mesh;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement