@vib3code/sdk 2.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (258) hide show
  1. package/CHANGELOG.md +118 -0
  2. package/DOCS/BLUEPRINT_EXECUTION_PLAN_2026-01-07.md +34 -0
  3. package/DOCS/CI_TESTING.md +38 -0
  4. package/DOCS/CLI_ONBOARDING.md +75 -0
  5. package/DOCS/CONTROL_REFERENCE.md +64 -0
  6. package/DOCS/DEV_TRACK_ANALYSIS.md +77 -0
  7. package/DOCS/DEV_TRACK_PLAN_2026-01-07.md +42 -0
  8. package/DOCS/DEV_TRACK_SESSION_2026-01-31.md +220 -0
  9. package/DOCS/ENV_SETUP.md +189 -0
  10. package/DOCS/EXPORT_FORMATS.md +417 -0
  11. package/DOCS/GPU_DISPOSAL_GUIDE.md +21 -0
  12. package/DOCS/LICENSING_TIERS.md +275 -0
  13. package/DOCS/MASTER_PLAN_2026-01-31.md +570 -0
  14. package/DOCS/OBS_SETUP_GUIDE.md +98 -0
  15. package/DOCS/PROJECT_SETUP.md +66 -0
  16. package/DOCS/RENDERER_LIFECYCLE.md +40 -0
  17. package/DOCS/REPO_MANIFEST.md +121 -0
  18. package/DOCS/SESSION_014_PLAN.md +195 -0
  19. package/DOCS/SESSION_LOG_2026-01-07.md +56 -0
  20. package/DOCS/STRATEGIC_BLUEPRINT_2026-01-07.md +72 -0
  21. package/DOCS/SYSTEM_AUDIT_2026-01-30.md +738 -0
  22. package/DOCS/SYSTEM_INVENTORY.md +520 -0
  23. package/DOCS/TELEMETRY_EXPORTS.md +34 -0
  24. package/DOCS/WEBGPU_STATUS.md +38 -0
  25. package/DOCS/XR_BENCHMARKS.md +608 -0
  26. package/LICENSE +21 -0
  27. package/README.md +426 -0
  28. package/docs/.nojekyll +0 -0
  29. package/docs/01-dissolution_of_euclidean_hegemony.html +346 -0
  30. package/docs/02-hyperspatial_ego_death.html +346 -0
  31. package/docs/03-post_cartesian_sublime.html +346 -0
  32. package/docs/04-crystalline_void_meditation.html +346 -0
  33. package/docs/05-quantum_decoherence_ballet.html +346 -0
  34. package/docs/06-dissolution_of_euclidean_hegemony.html +346 -0
  35. package/docs/07-hyperspatial_ego_death.html +346 -0
  36. package/docs/08-post_cartesian_sublime.html +346 -0
  37. package/docs/09-crystalline_void_meditation.html +346 -0
  38. package/docs/10-quantum_decoherence_ballet.html +346 -0
  39. package/docs/11-dissolution_of_euclidean_hegemony.html +346 -0
  40. package/docs/12-hyperspatial_ego_death.html +346 -0
  41. package/docs/13-post_cartesian_sublime.html +346 -0
  42. package/docs/index.html +794 -0
  43. package/docs/test-hub.html +441 -0
  44. package/docs/url-state.js +102 -0
  45. package/docs/vib3-exports/01-quantum-quantum-tetrahedron-lattice.html +489 -0
  46. package/docs/vib3-exports/02-quantum-quantum-hypersphere-matrix.html +489 -0
  47. package/docs/vib3-exports/03-quantum-quantum-hypertetra-fractal.html +489 -0
  48. package/docs/vib3-exports/04-faceted-faceted-crystal-structure.html +407 -0
  49. package/docs/vib3-exports/05-faceted-faceted-klein-bottle.html +407 -0
  50. package/docs/vib3-exports/06-faceted-faceted-hypertetra-torus.html +407 -0
  51. package/docs/vib3-exports/07-holographic-holographic-wave-field.html +457 -0
  52. package/docs/vib3-exports/08-holographic-holographic-hypersphere-sphere.html +457 -0
  53. package/docs/vib3-exports/09-holographic-holographic-hypertetra-crystal.html +457 -0
  54. package/docs/vib3-exports/index.html +238 -0
  55. package/docs/webgpu-live.html +702 -0
  56. package/package.json +367 -0
  57. package/src/advanced/AIPresetGenerator.js +777 -0
  58. package/src/advanced/MIDIController.js +703 -0
  59. package/src/advanced/OffscreenWorker.js +1051 -0
  60. package/src/advanced/WebGPUCompute.js +1051 -0
  61. package/src/advanced/WebXRRenderer.js +680 -0
  62. package/src/agent/cli/AgentCLI.js +615 -0
  63. package/src/agent/cli/index.js +14 -0
  64. package/src/agent/index.js +73 -0
  65. package/src/agent/mcp/MCPServer.js +950 -0
  66. package/src/agent/mcp/index.js +9 -0
  67. package/src/agent/mcp/tools.js +548 -0
  68. package/src/agent/telemetry/EventStream.js +669 -0
  69. package/src/agent/telemetry/Instrumentation.js +618 -0
  70. package/src/agent/telemetry/TelemetryExporters.js +427 -0
  71. package/src/agent/telemetry/TelemetryService.js +464 -0
  72. package/src/agent/telemetry/index.js +52 -0
  73. package/src/benchmarks/BenchmarkRunner.js +381 -0
  74. package/src/benchmarks/MetricsCollector.js +299 -0
  75. package/src/benchmarks/index.js +9 -0
  76. package/src/benchmarks/scenes.js +259 -0
  77. package/src/cli/index.js +675 -0
  78. package/src/config/ApiConfig.js +88 -0
  79. package/src/core/CanvasManager.js +217 -0
  80. package/src/core/ErrorReporter.js +117 -0
  81. package/src/core/ParameterMapper.js +333 -0
  82. package/src/core/Parameters.js +396 -0
  83. package/src/core/RendererContracts.js +200 -0
  84. package/src/core/UnifiedResourceManager.js +370 -0
  85. package/src/core/VIB3Engine.js +636 -0
  86. package/src/core/renderers/FacetedRendererAdapter.js +32 -0
  87. package/src/core/renderers/HolographicRendererAdapter.js +29 -0
  88. package/src/core/renderers/QuantumRendererAdapter.js +29 -0
  89. package/src/core/renderers/RendererLifecycleManager.js +63 -0
  90. package/src/creative/ColorPresetsSystem.js +980 -0
  91. package/src/creative/ParameterTimeline.js +1061 -0
  92. package/src/creative/PostProcessingPipeline.js +1113 -0
  93. package/src/creative/TransitionAnimator.js +683 -0
  94. package/src/export/CSSExporter.js +226 -0
  95. package/src/export/CardGeneratorBase.js +279 -0
  96. package/src/export/ExportManager.js +580 -0
  97. package/src/export/FacetedCardGenerator.js +279 -0
  98. package/src/export/HolographicCardGenerator.js +543 -0
  99. package/src/export/LottieExporter.js +552 -0
  100. package/src/export/QuantumCardGenerator.js +315 -0
  101. package/src/export/SVGExporter.js +519 -0
  102. package/src/export/ShaderExporter.js +903 -0
  103. package/src/export/TradingCardGenerator.js +3055 -0
  104. package/src/export/TradingCardManager.js +181 -0
  105. package/src/export/VIB3PackageExporter.js +559 -0
  106. package/src/export/index.js +14 -0
  107. package/src/export/systems/TradingCardSystemFaceted.js +494 -0
  108. package/src/export/systems/TradingCardSystemHolographic.js +452 -0
  109. package/src/export/systems/TradingCardSystemQuantum.js +411 -0
  110. package/src/faceted/FacetedSystem.js +963 -0
  111. package/src/features/CollectionManager.js +433 -0
  112. package/src/gallery/CollectionManager.js +240 -0
  113. package/src/gallery/GallerySystem.js +485 -0
  114. package/src/geometry/GeometryFactory.js +314 -0
  115. package/src/geometry/GeometryLibrary.js +72 -0
  116. package/src/geometry/buffers/BufferBuilder.js +338 -0
  117. package/src/geometry/buffers/index.js +18 -0
  118. package/src/geometry/generators/Crystal.js +420 -0
  119. package/src/geometry/generators/Fractal.js +298 -0
  120. package/src/geometry/generators/KleinBottle.js +197 -0
  121. package/src/geometry/generators/Sphere.js +192 -0
  122. package/src/geometry/generators/Tesseract.js +160 -0
  123. package/src/geometry/generators/Tetrahedron.js +225 -0
  124. package/src/geometry/generators/Torus.js +304 -0
  125. package/src/geometry/generators/Wave.js +341 -0
  126. package/src/geometry/index.js +142 -0
  127. package/src/geometry/warp/HypersphereCore.js +211 -0
  128. package/src/geometry/warp/HypertetraCore.js +386 -0
  129. package/src/geometry/warp/index.js +57 -0
  130. package/src/holograms/HolographicVisualizer.js +1073 -0
  131. package/src/holograms/RealHolographicSystem.js +966 -0
  132. package/src/holograms/variantRegistry.js +69 -0
  133. package/src/integrations/FigmaPlugin.js +854 -0
  134. package/src/integrations/OBSMode.js +754 -0
  135. package/src/integrations/ThreeJsPackage.js +660 -0
  136. package/src/integrations/TouchDesignerExport.js +552 -0
  137. package/src/integrations/frameworks/Vib3React.js +591 -0
  138. package/src/integrations/frameworks/Vib3Svelte.js +654 -0
  139. package/src/integrations/frameworks/Vib3Vue.js +628 -0
  140. package/src/llm/LLMParameterInterface.js +240 -0
  141. package/src/llm/LLMParameterUI.js +577 -0
  142. package/src/math/Mat4x4.js +708 -0
  143. package/src/math/Projection.js +341 -0
  144. package/src/math/Rotor4D.js +637 -0
  145. package/src/math/Vec4.js +476 -0
  146. package/src/math/constants.js +164 -0
  147. package/src/math/index.js +68 -0
  148. package/src/math/projections.js +54 -0
  149. package/src/math/rotations.js +196 -0
  150. package/src/quantum/QuantumEngine.js +906 -0
  151. package/src/quantum/QuantumVisualizer.js +1103 -0
  152. package/src/reactivity/ReactivityConfig.js +499 -0
  153. package/src/reactivity/ReactivityManager.js +586 -0
  154. package/src/reactivity/SpatialInputSystem.js +1783 -0
  155. package/src/reactivity/index.js +93 -0
  156. package/src/render/CommandBuffer.js +465 -0
  157. package/src/render/MultiCanvasBridge.js +340 -0
  158. package/src/render/RenderCommand.js +514 -0
  159. package/src/render/RenderResourceRegistry.js +523 -0
  160. package/src/render/RenderState.js +552 -0
  161. package/src/render/RenderTarget.js +512 -0
  162. package/src/render/ShaderLoader.js +253 -0
  163. package/src/render/ShaderProgram.js +599 -0
  164. package/src/render/UnifiedRenderBridge.js +496 -0
  165. package/src/render/backends/WebGLBackend.js +1108 -0
  166. package/src/render/backends/WebGPUBackend.js +1409 -0
  167. package/src/render/commands/CommandBufferExecutor.js +607 -0
  168. package/src/render/commands/RenderCommandBuffer.js +661 -0
  169. package/src/render/commands/index.js +17 -0
  170. package/src/render/index.js +367 -0
  171. package/src/scene/Disposable.js +498 -0
  172. package/src/scene/MemoryPool.js +618 -0
  173. package/src/scene/Node4D.js +697 -0
  174. package/src/scene/ResourceManager.js +599 -0
  175. package/src/scene/Scene4D.js +540 -0
  176. package/src/scene/index.js +98 -0
  177. package/src/schemas/error.schema.json +84 -0
  178. package/src/schemas/extension.schema.json +88 -0
  179. package/src/schemas/index.js +214 -0
  180. package/src/schemas/parameters.schema.json +142 -0
  181. package/src/schemas/tool-pack.schema.json +44 -0
  182. package/src/schemas/tool-response.schema.json +127 -0
  183. package/src/shaders/common/fullscreen.vert.glsl +5 -0
  184. package/src/shaders/common/fullscreen.vert.wgsl +17 -0
  185. package/src/shaders/common/geometry24.glsl +65 -0
  186. package/src/shaders/common/geometry24.wgsl +54 -0
  187. package/src/shaders/common/rotation4d.glsl +85 -0
  188. package/src/shaders/common/rotation4d.wgsl +86 -0
  189. package/src/shaders/common/uniforms.glsl +44 -0
  190. package/src/shaders/common/uniforms.wgsl +48 -0
  191. package/src/shaders/faceted/faceted.frag.glsl +129 -0
  192. package/src/shaders/faceted/faceted.frag.wgsl +164 -0
  193. package/src/shaders/holographic/holographic.frag.glsl +406 -0
  194. package/src/shaders/holographic/holographic.frag.wgsl +185 -0
  195. package/src/shaders/quantum/quantum.frag.glsl +513 -0
  196. package/src/shaders/quantum/quantum.frag.wgsl +361 -0
  197. package/src/testing/ParallelTestFramework.js +519 -0
  198. package/src/testing/__snapshots__/exportFormats.test.js.snap +24 -0
  199. package/src/testing/exportFormats.test.js +8 -0
  200. package/src/testing/projections.test.js +14 -0
  201. package/src/testing/rotations.test.js +37 -0
  202. package/src/ui/InteractivityMenu.js +516 -0
  203. package/src/ui/StatusManager.js +96 -0
  204. package/src/ui/adaptive/renderers/webgpu/BufferLayout.ts +252 -0
  205. package/src/ui/adaptive/renderers/webgpu/PolytopeInstanceBuffer.ts +144 -0
  206. package/src/ui/adaptive/renderers/webgpu/TripleBufferedUniform.ts +170 -0
  207. package/src/ui/adaptive/renderers/webgpu/WebGPURenderer.ts +735 -0
  208. package/src/ui/adaptive/renderers/webgpu/index.ts +112 -0
  209. package/src/variations/VariationManager.js +431 -0
  210. package/src/viewer/AudioReactivity.js +505 -0
  211. package/src/viewer/CardBending.js +481 -0
  212. package/src/viewer/GalleryUI.js +832 -0
  213. package/src/viewer/ReactivityManager.js +590 -0
  214. package/src/viewer/TradingCardExporter.js +600 -0
  215. package/src/viewer/ViewerPortal.js +374 -0
  216. package/src/viewer/index.js +12 -0
  217. package/src/wasm/WasmLoader.js +296 -0
  218. package/src/wasm/index.js +132 -0
  219. package/tools/agentic/mcpTools.js +88 -0
  220. package/tools/cli/agent-cli.js +92 -0
  221. package/tools/export/formats.js +24 -0
  222. package/tools/math/rotation-baseline.mjs +64 -0
  223. package/tools/shader-sync-verify.js +937 -0
  224. package/tools/telemetry/manifestPipeline.js +141 -0
  225. package/tools/telemetry/telemetryEvents.js +35 -0
  226. package/types/adaptive-sdk.d.ts +185 -0
  227. package/types/advanced/AIPresetGenerator.d.ts +81 -0
  228. package/types/advanced/MIDIController.d.ts +100 -0
  229. package/types/advanced/OffscreenWorker.d.ts +82 -0
  230. package/types/advanced/WebGPUCompute.d.ts +52 -0
  231. package/types/advanced/WebXRRenderer.d.ts +77 -0
  232. package/types/advanced/index.d.ts +46 -0
  233. package/types/core/ErrorReporter.d.ts +50 -0
  234. package/types/core/VIB3Engine.d.ts +204 -0
  235. package/types/creative/ColorPresetsSystem.d.ts +91 -0
  236. package/types/creative/ParameterTimeline.d.ts +74 -0
  237. package/types/creative/PostProcessingPipeline.d.ts +109 -0
  238. package/types/creative/TransitionAnimator.d.ts +71 -0
  239. package/types/creative/index.d.ts +35 -0
  240. package/types/integrations/FigmaPlugin.d.ts +46 -0
  241. package/types/integrations/OBSMode.d.ts +74 -0
  242. package/types/integrations/ThreeJsPackage.d.ts +62 -0
  243. package/types/integrations/TouchDesignerExport.d.ts +36 -0
  244. package/types/integrations/Vib3React.d.ts +74 -0
  245. package/types/integrations/Vib3Svelte.d.ts +63 -0
  246. package/types/integrations/Vib3Vue.d.ts +55 -0
  247. package/types/integrations/index.d.ts +52 -0
  248. package/types/reactivity/SpatialInputSystem.d.ts +173 -0
  249. package/types/reactivity/index.d.ts +394 -0
  250. package/types/render/CommandBuffer.d.ts +169 -0
  251. package/types/render/RenderCommand.d.ts +312 -0
  252. package/types/render/RenderState.d.ts +279 -0
  253. package/types/render/RenderTarget.d.ts +254 -0
  254. package/types/render/ShaderProgram.d.ts +277 -0
  255. package/types/render/UnifiedRenderBridge.d.ts +143 -0
  256. package/types/render/WebGLBackend.d.ts +168 -0
  257. package/types/render/WebGPUBackend.d.ts +186 -0
  258. package/types/render/index.d.ts +141 -0
@@ -0,0 +1,338 @@
1
+ /**
2
+ * Buffer Builder
3
+ *
4
+ * Converts geometry data into WebGL-compatible typed arrays.
5
+ * Handles vertex buffers, index buffers, and interleaved formats.
6
+ */
7
+
8
+ /**
9
+ * Build a Float32Array vertex buffer from Vec4 vertices
10
+ * @param {Vec4[]} vertices - Array of Vec4 vertices
11
+ * @param {string} format - 'xyzw' (4 floats) or 'xyz' (3 floats, drops w)
12
+ * @returns {Float32Array}
13
+ */
14
+ export function buildVertexBuffer(vertices, format = 'xyzw') {
15
+ const componentsPerVertex = format === 'xyz' ? 3 : 4;
16
+ const buffer = new Float32Array(vertices.length * componentsPerVertex);
17
+
18
+ for (let i = 0; i < vertices.length; i++) {
19
+ const v = vertices[i];
20
+ const offset = i * componentsPerVertex;
21
+
22
+ buffer[offset] = v.x;
23
+ buffer[offset + 1] = v.y;
24
+ buffer[offset + 2] = v.z;
25
+
26
+ if (format === 'xyzw') {
27
+ buffer[offset + 3] = v.w;
28
+ }
29
+ }
30
+
31
+ return buffer;
32
+ }
33
+
34
+ /**
35
+ * Build a Uint16Array or Uint32Array index buffer from edges
36
+ * @param {number[][]} edges - Array of [start, end] index pairs
37
+ * @param {boolean} use32Bit - Use Uint32Array instead of Uint16Array
38
+ * @returns {Uint16Array|Uint32Array}
39
+ */
40
+ export function buildEdgeIndexBuffer(edges, use32Bit = false) {
41
+ const ArrayType = use32Bit ? Uint32Array : Uint16Array;
42
+ const buffer = new ArrayType(edges.length * 2);
43
+
44
+ for (let i = 0; i < edges.length; i++) {
45
+ buffer[i * 2] = edges[i][0];
46
+ buffer[i * 2 + 1] = edges[i][1];
47
+ }
48
+
49
+ return buffer;
50
+ }
51
+
52
+ /**
53
+ * Build triangle index buffer from faces
54
+ * @param {number[][]} faces - Array of face vertex indices (triangles or quads)
55
+ * @param {boolean} use32Bit - Use Uint32Array
56
+ * @returns {Uint16Array|Uint32Array}
57
+ */
58
+ export function buildFaceIndexBuffer(faces, use32Bit = false) {
59
+ const triangles = [];
60
+
61
+ for (const face of faces) {
62
+ if (face.length === 3) {
63
+ // Triangle
64
+ triangles.push(face[0], face[1], face[2]);
65
+ } else if (face.length === 4) {
66
+ // Quad - split into 2 triangles
67
+ triangles.push(face[0], face[1], face[2]);
68
+ triangles.push(face[0], face[2], face[3]);
69
+ } else if (face.length > 4) {
70
+ // Polygon - fan triangulation
71
+ for (let i = 1; i < face.length - 1; i++) {
72
+ triangles.push(face[0], face[i], face[i + 1]);
73
+ }
74
+ }
75
+ }
76
+
77
+ const ArrayType = use32Bit ? Uint32Array : Uint16Array;
78
+ return new ArrayType(triangles);
79
+ }
80
+
81
+ /**
82
+ * Build interleaved vertex buffer with position and color
83
+ * @param {Vec4[]} vertices - Vertex positions
84
+ * @param {number[][]} colors - RGBA colors per vertex (or single color)
85
+ * @param {string} format - Position format ('xyzw' or 'xyz')
86
+ * @returns {Float32Array}
87
+ */
88
+ export function buildInterleavedBuffer(vertices, colors, format = 'xyzw') {
89
+ const posComponents = format === 'xyz' ? 3 : 4;
90
+ const colorComponents = 4; // RGBA
91
+ const stride = posComponents + colorComponents;
92
+ const buffer = new Float32Array(vertices.length * stride);
93
+
94
+ const singleColor = colors.length === 1 || colors.length === 4;
95
+
96
+ for (let i = 0; i < vertices.length; i++) {
97
+ const v = vertices[i];
98
+ const offset = i * stride;
99
+
100
+ // Position
101
+ buffer[offset] = v.x;
102
+ buffer[offset + 1] = v.y;
103
+ buffer[offset + 2] = v.z;
104
+ if (posComponents === 4) {
105
+ buffer[offset + 3] = v.w;
106
+ }
107
+
108
+ // Color
109
+ const colorOffset = offset + posComponents;
110
+ if (singleColor) {
111
+ const c = colors.length === 4 ? colors : colors[0];
112
+ buffer[colorOffset] = c[0];
113
+ buffer[colorOffset + 1] = c[1];
114
+ buffer[colorOffset + 2] = c[2];
115
+ buffer[colorOffset + 3] = c[3];
116
+ } else {
117
+ const c = colors[i] || [1, 1, 1, 1];
118
+ buffer[colorOffset] = c[0];
119
+ buffer[colorOffset + 1] = c[1];
120
+ buffer[colorOffset + 2] = c[2];
121
+ buffer[colorOffset + 3] = c[3];
122
+ }
123
+ }
124
+
125
+ return buffer;
126
+ }
127
+
128
+ /**
129
+ * Build normal vectors from vertex data (for lighting)
130
+ * @param {Vec4[]} vertices - Vertex positions
131
+ * @param {number[][]} faces - Face indices
132
+ * @returns {Float32Array} Normal vectors (x, y, z per vertex)
133
+ */
134
+ export function buildNormalBuffer(vertices, faces) {
135
+ // Initialize normals to zero
136
+ const normals = new Float32Array(vertices.length * 3);
137
+
138
+ // Accumulate face normals to vertices
139
+ for (const face of faces) {
140
+ if (face.length < 3) continue;
141
+
142
+ const v0 = vertices[face[0]];
143
+ const v1 = vertices[face[1]];
144
+ const v2 = vertices[face[2]];
145
+
146
+ // Compute face normal (cross product of edges)
147
+ const e1x = v1.x - v0.x;
148
+ const e1y = v1.y - v0.y;
149
+ const e1z = v1.z - v0.z;
150
+
151
+ const e2x = v2.x - v0.x;
152
+ const e2y = v2.y - v0.y;
153
+ const e2z = v2.z - v0.z;
154
+
155
+ const nx = e1y * e2z - e1z * e2y;
156
+ const ny = e1z * e2x - e1x * e2z;
157
+ const nz = e1x * e2y - e1y * e2x;
158
+
159
+ // Add to all vertices of face
160
+ for (const idx of face) {
161
+ normals[idx * 3] += nx;
162
+ normals[idx * 3 + 1] += ny;
163
+ normals[idx * 3 + 2] += nz;
164
+ }
165
+ }
166
+
167
+ // Normalize all normals
168
+ for (let i = 0; i < vertices.length; i++) {
169
+ const offset = i * 3;
170
+ const len = Math.sqrt(
171
+ normals[offset] * normals[offset] +
172
+ normals[offset + 1] * normals[offset + 1] +
173
+ normals[offset + 2] * normals[offset + 2]
174
+ );
175
+
176
+ if (len > 0.0001) {
177
+ normals[offset] /= len;
178
+ normals[offset + 1] /= len;
179
+ normals[offset + 2] /= len;
180
+ }
181
+ }
182
+
183
+ return normals;
184
+ }
185
+
186
+ /**
187
+ * Generate colors based on W coordinate (4D depth)
188
+ * @param {Vec4[]} vertices - Vertex positions
189
+ * @param {object} colorMap - Color mapping options
190
+ * @returns {number[][]} RGBA colors per vertex
191
+ */
192
+ export function generateWDepthColors(vertices, colorMap = {}) {
193
+ const {
194
+ nearColor = [1, 0.2, 0.2, 1], // Red for w > 0
195
+ farColor = [0.2, 0.2, 1, 1], // Blue for w < 0
196
+ midColor = [0.2, 1, 0.2, 1], // Green for w = 0
197
+ range = 2
198
+ } = colorMap;
199
+
200
+ return vertices.map(v => {
201
+ const t = (v.w / range + 1) / 2; // Normalize to 0-1
202
+
203
+ if (t > 0.5) {
204
+ // Blend mid to near
205
+ const blend = (t - 0.5) * 2;
206
+ return [
207
+ midColor[0] + (nearColor[0] - midColor[0]) * blend,
208
+ midColor[1] + (nearColor[1] - midColor[1]) * blend,
209
+ midColor[2] + (nearColor[2] - midColor[2]) * blend,
210
+ 1
211
+ ];
212
+ } else {
213
+ // Blend far to mid
214
+ const blend = t * 2;
215
+ return [
216
+ farColor[0] + (midColor[0] - farColor[0]) * blend,
217
+ farColor[1] + (midColor[1] - farColor[1]) * blend,
218
+ farColor[2] + (midColor[2] - farColor[2]) * blend,
219
+ 1
220
+ ];
221
+ }
222
+ });
223
+ }
224
+
225
+ /**
226
+ * Generate colors based on vertex index (rainbow)
227
+ * @param {number} vertexCount - Number of vertices
228
+ * @param {number} saturation - Color saturation (0-1)
229
+ * @param {number} lightness - Color lightness (0-1)
230
+ * @returns {number[][]} RGBA colors per vertex
231
+ */
232
+ export function generateRainbowColors(vertexCount, saturation = 1, lightness = 0.5) {
233
+ const colors = [];
234
+
235
+ for (let i = 0; i < vertexCount; i++) {
236
+ const hue = (i / vertexCount) * 360;
237
+ const rgb = hslToRgb(hue, saturation, lightness);
238
+ colors.push([rgb[0], rgb[1], rgb[2], 1]);
239
+ }
240
+
241
+ return colors;
242
+ }
243
+
244
+ /**
245
+ * HSL to RGB conversion
246
+ * @param {number} h - Hue (0-360)
247
+ * @param {number} s - Saturation (0-1)
248
+ * @param {number} l - Lightness (0-1)
249
+ * @returns {number[]} RGB values (0-1)
250
+ */
251
+ function hslToRgb(h, s, l) {
252
+ const c = (1 - Math.abs(2 * l - 1)) * s;
253
+ const x = c * (1 - Math.abs((h / 60) % 2 - 1));
254
+ const m = l - c / 2;
255
+
256
+ let r, g, b;
257
+
258
+ if (h < 60) { r = c; g = x; b = 0; }
259
+ else if (h < 120) { r = x; g = c; b = 0; }
260
+ else if (h < 180) { r = 0; g = c; b = x; }
261
+ else if (h < 240) { r = 0; g = x; b = c; }
262
+ else if (h < 300) { r = x; g = 0; b = c; }
263
+ else { r = c; g = 0; b = x; }
264
+
265
+ return [r + m, g + m, b + m];
266
+ }
267
+
268
+ /**
269
+ * Build complete WebGL-ready geometry buffers
270
+ * @param {object} geometry - Geometry with vertices, edges, faces
271
+ * @param {object} options - Buffer options
272
+ * @returns {object} WebGL buffer data
273
+ */
274
+ export function buildGeometryBuffers(geometry, options = {}) {
275
+ const {
276
+ format = 'xyzw',
277
+ includeNormals = false,
278
+ includeColors = true,
279
+ colorMode = 'wDepth', // 'wDepth', 'rainbow', 'uniform'
280
+ uniformColor = [1, 1, 1, 1],
281
+ use32BitIndices = false
282
+ } = options;
283
+
284
+ const result = {
285
+ vertices: buildVertexBuffer(geometry.vertices, format),
286
+ vertexCount: geometry.vertices.length,
287
+ stride: format === 'xyz' ? 3 : 4
288
+ };
289
+
290
+ // Edge indices
291
+ if (geometry.edges && geometry.edges.length > 0) {
292
+ result.edgeIndices = buildEdgeIndexBuffer(geometry.edges, use32BitIndices);
293
+ result.edgeCount = geometry.edges.length;
294
+ }
295
+
296
+ // Face indices
297
+ if (geometry.faces && geometry.faces.length > 0) {
298
+ result.faceIndices = buildFaceIndexBuffer(geometry.faces, use32BitIndices);
299
+ result.faceCount = geometry.faces.length;
300
+ }
301
+
302
+ // Normals
303
+ if (includeNormals && geometry.faces) {
304
+ result.normals = buildNormalBuffer(geometry.vertices, geometry.faces);
305
+ }
306
+
307
+ // Colors
308
+ if (includeColors) {
309
+ let colors;
310
+ switch (colorMode) {
311
+ case 'wDepth':
312
+ colors = generateWDepthColors(geometry.vertices);
313
+ break;
314
+ case 'rainbow':
315
+ colors = generateRainbowColors(geometry.vertices.length);
316
+ break;
317
+ case 'uniform':
318
+ default:
319
+ colors = [uniformColor];
320
+ break;
321
+ }
322
+
323
+ result.colors = new Float32Array(geometry.vertices.length * 4);
324
+ const singleColor = colors.length === 1;
325
+
326
+ for (let i = 0; i < geometry.vertices.length; i++) {
327
+ const c = singleColor ? colors[0] : colors[i];
328
+ result.colors[i * 4] = c[0];
329
+ result.colors[i * 4 + 1] = c[1];
330
+ result.colors[i * 4 + 2] = c[2];
331
+ result.colors[i * 4 + 3] = c[3];
332
+ }
333
+ }
334
+
335
+ return result;
336
+ }
337
+
338
+ export default buildGeometryBuffers;
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Buffer Utilities Index
3
+ *
4
+ * WebGL buffer generation for geometry rendering.
5
+ */
6
+
7
+ export {
8
+ buildVertexBuffer,
9
+ buildEdgeIndexBuffer,
10
+ buildFaceIndexBuffer,
11
+ buildInterleavedBuffer,
12
+ buildNormalBuffer,
13
+ generateWDepthColors,
14
+ generateRainbowColors,
15
+ buildGeometryBuffers
16
+ } from './BufferBuilder.js';
17
+
18
+ export { default as buildGeometryBuffers } from './BufferBuilder.js';