MCPcopy Create free account
hub / github.com/Bloom-Engine/engine / makeSphere

Function makeSphere

examples/pbr-spheres/main.ts:133–170  ·  view source on GitHub ↗
(segs: number, rings: number)

Source from the content-addressed store, hash-verified

131// `new Array(N)` + index assignment is documented as working
132// (per the perry-llvm fix history).
133function makeSphere(segs: number, rings: number): {
134 vertices: number[]; vertexCount: number;
135 indices: number[]; indexCount: number;
136} {
137 const vCount = (rings + 1) * (segs + 1);
138 const iCount = rings * segs * 6;
139 const verts: number[] = new Array(vCount * 12);
140 const inds: number[] = new Array(iCount);
141 let vi = 0;
142 for (let r = 0; r <= rings; r = r + 1) {
143 const phi = PI * r / rings;
144 const sp = Math.sin(phi);
145 const cp = Math.cos(phi);
146 for (let s = 0; s <= segs; s = s + 1) {
147 const theta = TWO_PI * s / segs;
148 const x = sp * Math.cos(theta);
149 const y = cp;
150 const z = sp * Math.sin(theta);
151 verts[vi] = x; verts[vi + 1] = y; verts[vi + 2] = z; // pos
152 verts[vi + 3] = x; verts[vi + 4] = y; verts[vi + 5] = z; // normal
153 verts[vi + 6] = 1; verts[vi + 7] = 1; verts[vi + 8] = 1;
154 verts[vi + 9] = 1; // color rgba
155 verts[vi + 10] = s / segs; verts[vi + 11] = r / rings; // uv
156 vi = vi + 12;
157 }
158 }
159 let ii = 0;
160 for (let r = 0; r < rings; r = r + 1) {
161 for (let s = 0; s < segs; s = s + 1) {
162 const a = r * (segs + 1) + s;
163 const b = a + segs + 1;
164 inds[ii] = a; inds[ii + 1] = b; inds[ii + 2] = a + 1;
165 inds[ii + 3] = b; inds[ii + 4] = b + 1; inds[ii + 5] = a + 1;
166 ii = ii + 6;
167 }
168 }
169 return { vertices: verts, vertexCount: vCount, indices: inds, indexCount: iCount };
170}
171
172function initSharedMeshes(): void {
173 const sphere = makeSphere(24, 16);

Callers 1

initSharedMeshesFunction · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected