@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.
- package/CHANGELOG.md +118 -0
- package/DOCS/BLUEPRINT_EXECUTION_PLAN_2026-01-07.md +34 -0
- package/DOCS/CI_TESTING.md +38 -0
- package/DOCS/CLI_ONBOARDING.md +75 -0
- package/DOCS/CONTROL_REFERENCE.md +64 -0
- package/DOCS/DEV_TRACK_ANALYSIS.md +77 -0
- package/DOCS/DEV_TRACK_PLAN_2026-01-07.md +42 -0
- package/DOCS/DEV_TRACK_SESSION_2026-01-31.md +220 -0
- package/DOCS/ENV_SETUP.md +189 -0
- package/DOCS/EXPORT_FORMATS.md +417 -0
- package/DOCS/GPU_DISPOSAL_GUIDE.md +21 -0
- package/DOCS/LICENSING_TIERS.md +275 -0
- package/DOCS/MASTER_PLAN_2026-01-31.md +570 -0
- package/DOCS/OBS_SETUP_GUIDE.md +98 -0
- package/DOCS/PROJECT_SETUP.md +66 -0
- package/DOCS/RENDERER_LIFECYCLE.md +40 -0
- package/DOCS/REPO_MANIFEST.md +121 -0
- package/DOCS/SESSION_014_PLAN.md +195 -0
- package/DOCS/SESSION_LOG_2026-01-07.md +56 -0
- package/DOCS/STRATEGIC_BLUEPRINT_2026-01-07.md +72 -0
- package/DOCS/SYSTEM_AUDIT_2026-01-30.md +738 -0
- package/DOCS/SYSTEM_INVENTORY.md +520 -0
- package/DOCS/TELEMETRY_EXPORTS.md +34 -0
- package/DOCS/WEBGPU_STATUS.md +38 -0
- package/DOCS/XR_BENCHMARKS.md +608 -0
- package/LICENSE +21 -0
- package/README.md +426 -0
- package/docs/.nojekyll +0 -0
- package/docs/01-dissolution_of_euclidean_hegemony.html +346 -0
- package/docs/02-hyperspatial_ego_death.html +346 -0
- package/docs/03-post_cartesian_sublime.html +346 -0
- package/docs/04-crystalline_void_meditation.html +346 -0
- package/docs/05-quantum_decoherence_ballet.html +346 -0
- package/docs/06-dissolution_of_euclidean_hegemony.html +346 -0
- package/docs/07-hyperspatial_ego_death.html +346 -0
- package/docs/08-post_cartesian_sublime.html +346 -0
- package/docs/09-crystalline_void_meditation.html +346 -0
- package/docs/10-quantum_decoherence_ballet.html +346 -0
- package/docs/11-dissolution_of_euclidean_hegemony.html +346 -0
- package/docs/12-hyperspatial_ego_death.html +346 -0
- package/docs/13-post_cartesian_sublime.html +346 -0
- package/docs/index.html +794 -0
- package/docs/test-hub.html +441 -0
- package/docs/url-state.js +102 -0
- package/docs/vib3-exports/01-quantum-quantum-tetrahedron-lattice.html +489 -0
- package/docs/vib3-exports/02-quantum-quantum-hypersphere-matrix.html +489 -0
- package/docs/vib3-exports/03-quantum-quantum-hypertetra-fractal.html +489 -0
- package/docs/vib3-exports/04-faceted-faceted-crystal-structure.html +407 -0
- package/docs/vib3-exports/05-faceted-faceted-klein-bottle.html +407 -0
- package/docs/vib3-exports/06-faceted-faceted-hypertetra-torus.html +407 -0
- package/docs/vib3-exports/07-holographic-holographic-wave-field.html +457 -0
- package/docs/vib3-exports/08-holographic-holographic-hypersphere-sphere.html +457 -0
- package/docs/vib3-exports/09-holographic-holographic-hypertetra-crystal.html +457 -0
- package/docs/vib3-exports/index.html +238 -0
- package/docs/webgpu-live.html +702 -0
- package/package.json +367 -0
- package/src/advanced/AIPresetGenerator.js +777 -0
- package/src/advanced/MIDIController.js +703 -0
- package/src/advanced/OffscreenWorker.js +1051 -0
- package/src/advanced/WebGPUCompute.js +1051 -0
- package/src/advanced/WebXRRenderer.js +680 -0
- package/src/agent/cli/AgentCLI.js +615 -0
- package/src/agent/cli/index.js +14 -0
- package/src/agent/index.js +73 -0
- package/src/agent/mcp/MCPServer.js +950 -0
- package/src/agent/mcp/index.js +9 -0
- package/src/agent/mcp/tools.js +548 -0
- package/src/agent/telemetry/EventStream.js +669 -0
- package/src/agent/telemetry/Instrumentation.js +618 -0
- package/src/agent/telemetry/TelemetryExporters.js +427 -0
- package/src/agent/telemetry/TelemetryService.js +464 -0
- package/src/agent/telemetry/index.js +52 -0
- package/src/benchmarks/BenchmarkRunner.js +381 -0
- package/src/benchmarks/MetricsCollector.js +299 -0
- package/src/benchmarks/index.js +9 -0
- package/src/benchmarks/scenes.js +259 -0
- package/src/cli/index.js +675 -0
- package/src/config/ApiConfig.js +88 -0
- package/src/core/CanvasManager.js +217 -0
- package/src/core/ErrorReporter.js +117 -0
- package/src/core/ParameterMapper.js +333 -0
- package/src/core/Parameters.js +396 -0
- package/src/core/RendererContracts.js +200 -0
- package/src/core/UnifiedResourceManager.js +370 -0
- package/src/core/VIB3Engine.js +636 -0
- package/src/core/renderers/FacetedRendererAdapter.js +32 -0
- package/src/core/renderers/HolographicRendererAdapter.js +29 -0
- package/src/core/renderers/QuantumRendererAdapter.js +29 -0
- package/src/core/renderers/RendererLifecycleManager.js +63 -0
- package/src/creative/ColorPresetsSystem.js +980 -0
- package/src/creative/ParameterTimeline.js +1061 -0
- package/src/creative/PostProcessingPipeline.js +1113 -0
- package/src/creative/TransitionAnimator.js +683 -0
- package/src/export/CSSExporter.js +226 -0
- package/src/export/CardGeneratorBase.js +279 -0
- package/src/export/ExportManager.js +580 -0
- package/src/export/FacetedCardGenerator.js +279 -0
- package/src/export/HolographicCardGenerator.js +543 -0
- package/src/export/LottieExporter.js +552 -0
- package/src/export/QuantumCardGenerator.js +315 -0
- package/src/export/SVGExporter.js +519 -0
- package/src/export/ShaderExporter.js +903 -0
- package/src/export/TradingCardGenerator.js +3055 -0
- package/src/export/TradingCardManager.js +181 -0
- package/src/export/VIB3PackageExporter.js +559 -0
- package/src/export/index.js +14 -0
- package/src/export/systems/TradingCardSystemFaceted.js +494 -0
- package/src/export/systems/TradingCardSystemHolographic.js +452 -0
- package/src/export/systems/TradingCardSystemQuantum.js +411 -0
- package/src/faceted/FacetedSystem.js +963 -0
- package/src/features/CollectionManager.js +433 -0
- package/src/gallery/CollectionManager.js +240 -0
- package/src/gallery/GallerySystem.js +485 -0
- package/src/geometry/GeometryFactory.js +314 -0
- package/src/geometry/GeometryLibrary.js +72 -0
- package/src/geometry/buffers/BufferBuilder.js +338 -0
- package/src/geometry/buffers/index.js +18 -0
- package/src/geometry/generators/Crystal.js +420 -0
- package/src/geometry/generators/Fractal.js +298 -0
- package/src/geometry/generators/KleinBottle.js +197 -0
- package/src/geometry/generators/Sphere.js +192 -0
- package/src/geometry/generators/Tesseract.js +160 -0
- package/src/geometry/generators/Tetrahedron.js +225 -0
- package/src/geometry/generators/Torus.js +304 -0
- package/src/geometry/generators/Wave.js +341 -0
- package/src/geometry/index.js +142 -0
- package/src/geometry/warp/HypersphereCore.js +211 -0
- package/src/geometry/warp/HypertetraCore.js +386 -0
- package/src/geometry/warp/index.js +57 -0
- package/src/holograms/HolographicVisualizer.js +1073 -0
- package/src/holograms/RealHolographicSystem.js +966 -0
- package/src/holograms/variantRegistry.js +69 -0
- package/src/integrations/FigmaPlugin.js +854 -0
- package/src/integrations/OBSMode.js +754 -0
- package/src/integrations/ThreeJsPackage.js +660 -0
- package/src/integrations/TouchDesignerExport.js +552 -0
- package/src/integrations/frameworks/Vib3React.js +591 -0
- package/src/integrations/frameworks/Vib3Svelte.js +654 -0
- package/src/integrations/frameworks/Vib3Vue.js +628 -0
- package/src/llm/LLMParameterInterface.js +240 -0
- package/src/llm/LLMParameterUI.js +577 -0
- package/src/math/Mat4x4.js +708 -0
- package/src/math/Projection.js +341 -0
- package/src/math/Rotor4D.js +637 -0
- package/src/math/Vec4.js +476 -0
- package/src/math/constants.js +164 -0
- package/src/math/index.js +68 -0
- package/src/math/projections.js +54 -0
- package/src/math/rotations.js +196 -0
- package/src/quantum/QuantumEngine.js +906 -0
- package/src/quantum/QuantumVisualizer.js +1103 -0
- package/src/reactivity/ReactivityConfig.js +499 -0
- package/src/reactivity/ReactivityManager.js +586 -0
- package/src/reactivity/SpatialInputSystem.js +1783 -0
- package/src/reactivity/index.js +93 -0
- package/src/render/CommandBuffer.js +465 -0
- package/src/render/MultiCanvasBridge.js +340 -0
- package/src/render/RenderCommand.js +514 -0
- package/src/render/RenderResourceRegistry.js +523 -0
- package/src/render/RenderState.js +552 -0
- package/src/render/RenderTarget.js +512 -0
- package/src/render/ShaderLoader.js +253 -0
- package/src/render/ShaderProgram.js +599 -0
- package/src/render/UnifiedRenderBridge.js +496 -0
- package/src/render/backends/WebGLBackend.js +1108 -0
- package/src/render/backends/WebGPUBackend.js +1409 -0
- package/src/render/commands/CommandBufferExecutor.js +607 -0
- package/src/render/commands/RenderCommandBuffer.js +661 -0
- package/src/render/commands/index.js +17 -0
- package/src/render/index.js +367 -0
- package/src/scene/Disposable.js +498 -0
- package/src/scene/MemoryPool.js +618 -0
- package/src/scene/Node4D.js +697 -0
- package/src/scene/ResourceManager.js +599 -0
- package/src/scene/Scene4D.js +540 -0
- package/src/scene/index.js +98 -0
- package/src/schemas/error.schema.json +84 -0
- package/src/schemas/extension.schema.json +88 -0
- package/src/schemas/index.js +214 -0
- package/src/schemas/parameters.schema.json +142 -0
- package/src/schemas/tool-pack.schema.json +44 -0
- package/src/schemas/tool-response.schema.json +127 -0
- package/src/shaders/common/fullscreen.vert.glsl +5 -0
- package/src/shaders/common/fullscreen.vert.wgsl +17 -0
- package/src/shaders/common/geometry24.glsl +65 -0
- package/src/shaders/common/geometry24.wgsl +54 -0
- package/src/shaders/common/rotation4d.glsl +85 -0
- package/src/shaders/common/rotation4d.wgsl +86 -0
- package/src/shaders/common/uniforms.glsl +44 -0
- package/src/shaders/common/uniforms.wgsl +48 -0
- package/src/shaders/faceted/faceted.frag.glsl +129 -0
- package/src/shaders/faceted/faceted.frag.wgsl +164 -0
- package/src/shaders/holographic/holographic.frag.glsl +406 -0
- package/src/shaders/holographic/holographic.frag.wgsl +185 -0
- package/src/shaders/quantum/quantum.frag.glsl +513 -0
- package/src/shaders/quantum/quantum.frag.wgsl +361 -0
- package/src/testing/ParallelTestFramework.js +519 -0
- package/src/testing/__snapshots__/exportFormats.test.js.snap +24 -0
- package/src/testing/exportFormats.test.js +8 -0
- package/src/testing/projections.test.js +14 -0
- package/src/testing/rotations.test.js +37 -0
- package/src/ui/InteractivityMenu.js +516 -0
- package/src/ui/StatusManager.js +96 -0
- package/src/ui/adaptive/renderers/webgpu/BufferLayout.ts +252 -0
- package/src/ui/adaptive/renderers/webgpu/PolytopeInstanceBuffer.ts +144 -0
- package/src/ui/adaptive/renderers/webgpu/TripleBufferedUniform.ts +170 -0
- package/src/ui/adaptive/renderers/webgpu/WebGPURenderer.ts +735 -0
- package/src/ui/adaptive/renderers/webgpu/index.ts +112 -0
- package/src/variations/VariationManager.js +431 -0
- package/src/viewer/AudioReactivity.js +505 -0
- package/src/viewer/CardBending.js +481 -0
- package/src/viewer/GalleryUI.js +832 -0
- package/src/viewer/ReactivityManager.js +590 -0
- package/src/viewer/TradingCardExporter.js +600 -0
- package/src/viewer/ViewerPortal.js +374 -0
- package/src/viewer/index.js +12 -0
- package/src/wasm/WasmLoader.js +296 -0
- package/src/wasm/index.js +132 -0
- package/tools/agentic/mcpTools.js +88 -0
- package/tools/cli/agent-cli.js +92 -0
- package/tools/export/formats.js +24 -0
- package/tools/math/rotation-baseline.mjs +64 -0
- package/tools/shader-sync-verify.js +937 -0
- package/tools/telemetry/manifestPipeline.js +141 -0
- package/tools/telemetry/telemetryEvents.js +35 -0
- package/types/adaptive-sdk.d.ts +185 -0
- package/types/advanced/AIPresetGenerator.d.ts +81 -0
- package/types/advanced/MIDIController.d.ts +100 -0
- package/types/advanced/OffscreenWorker.d.ts +82 -0
- package/types/advanced/WebGPUCompute.d.ts +52 -0
- package/types/advanced/WebXRRenderer.d.ts +77 -0
- package/types/advanced/index.d.ts +46 -0
- package/types/core/ErrorReporter.d.ts +50 -0
- package/types/core/VIB3Engine.d.ts +204 -0
- package/types/creative/ColorPresetsSystem.d.ts +91 -0
- package/types/creative/ParameterTimeline.d.ts +74 -0
- package/types/creative/PostProcessingPipeline.d.ts +109 -0
- package/types/creative/TransitionAnimator.d.ts +71 -0
- package/types/creative/index.d.ts +35 -0
- package/types/integrations/FigmaPlugin.d.ts +46 -0
- package/types/integrations/OBSMode.d.ts +74 -0
- package/types/integrations/ThreeJsPackage.d.ts +62 -0
- package/types/integrations/TouchDesignerExport.d.ts +36 -0
- package/types/integrations/Vib3React.d.ts +74 -0
- package/types/integrations/Vib3Svelte.d.ts +63 -0
- package/types/integrations/Vib3Vue.d.ts +55 -0
- package/types/integrations/index.d.ts +52 -0
- package/types/reactivity/SpatialInputSystem.d.ts +173 -0
- package/types/reactivity/index.d.ts +394 -0
- package/types/render/CommandBuffer.d.ts +169 -0
- package/types/render/RenderCommand.d.ts +312 -0
- package/types/render/RenderState.d.ts +279 -0
- package/types/render/RenderTarget.d.ts +254 -0
- package/types/render/ShaderProgram.d.ts +277 -0
- package/types/render/UnifiedRenderBridge.d.ts +143 -0
- package/types/render/WebGLBackend.d.ts +168 -0
- package/types/render/WebGPUBackend.d.ts +186 -0
- package/types/render/index.d.ts +141 -0
|
@@ -0,0 +1,407 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="UTF-8">
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
6
|
+
<title>Faceted Crystal Structure</title>
|
|
7
|
+
<style>
|
|
8
|
+
* { margin: 0; padding: 0; box-sizing: border-box; }
|
|
9
|
+
body { background: #000; overflow: hidden; font-family: 'Segoe UI', system-ui, sans-serif; }
|
|
10
|
+
canvas { display: block; width: 100vw; height: 100vh; }
|
|
11
|
+
.info {
|
|
12
|
+
position: fixed;
|
|
13
|
+
bottom: 20px;
|
|
14
|
+
left: 20px;
|
|
15
|
+
background: rgba(0,0,0,0.8);
|
|
16
|
+
border: 1px solid rgba(100,255,150,0.3);
|
|
17
|
+
border-radius: 8px;
|
|
18
|
+
padding: 15px 20px;
|
|
19
|
+
color: #fff;
|
|
20
|
+
font-size: 12px;
|
|
21
|
+
backdrop-filter: blur(10px);
|
|
22
|
+
max-width: 320px;
|
|
23
|
+
}
|
|
24
|
+
.info h3 { color: #64ff96; margin-bottom: 8px; font-size: 14px; }
|
|
25
|
+
.info p { opacity: 0.8; line-height: 1.4; margin-bottom: 8px; }
|
|
26
|
+
.info .meta { font-size: 10px; opacity: 0.6; border-top: 1px solid rgba(255,255,255,0.1); padding-top: 8px; }
|
|
27
|
+
.audio-btn {
|
|
28
|
+
position: fixed;
|
|
29
|
+
top: 20px;
|
|
30
|
+
right: 20px;
|
|
31
|
+
background: rgba(0,0,0,0.8);
|
|
32
|
+
border: 1px solid rgba(100,255,150,0.3);
|
|
33
|
+
border-radius: 8px;
|
|
34
|
+
padding: 10px 15px;
|
|
35
|
+
color: #64ff96;
|
|
36
|
+
cursor: pointer;
|
|
37
|
+
font-size: 12px;
|
|
38
|
+
}
|
|
39
|
+
.audio-btn:hover { background: rgba(100,255,150,0.2); }
|
|
40
|
+
</style>
|
|
41
|
+
</head>
|
|
42
|
+
<body>
|
|
43
|
+
<canvas id="vib3"></canvas>
|
|
44
|
+
<div class="info">
|
|
45
|
+
<h3>Faceted Crystal Structure</h3>
|
|
46
|
+
<p>Clean SDF crystal geometry - sharp faceted edges with 4D rotation projection</p>
|
|
47
|
+
<div class="meta">
|
|
48
|
+
System: FACETED<br>
|
|
49
|
+
Geometry: 7 (Base)<br>
|
|
50
|
+
VIB3+ Export • 1/26/2026
|
|
51
|
+
</div>
|
|
52
|
+
</div>
|
|
53
|
+
<button class="audio-btn" onclick="toggleAudio()">🎵 Enable Audio</button>
|
|
54
|
+
|
|
55
|
+
<script>
|
|
56
|
+
// VIB3+ Exported Visualization
|
|
57
|
+
// System: faceted
|
|
58
|
+
// Generated: 2026-01-26T22:37:57.875Z
|
|
59
|
+
|
|
60
|
+
const CONFIG = {
|
|
61
|
+
system: 'faceted',
|
|
62
|
+
geometry: 7,
|
|
63
|
+
params: {
|
|
64
|
+
"gridDensity": 12,
|
|
65
|
+
"morphFactor": 1,
|
|
66
|
+
"chaos": 0.1,
|
|
67
|
+
"speed": 1,
|
|
68
|
+
"hue": 220,
|
|
69
|
+
"intensity": 0.9,
|
|
70
|
+
"saturation": 0.8,
|
|
71
|
+
"dimension": 3.5,
|
|
72
|
+
"rot4dXY": 0,
|
|
73
|
+
"rot4dXZ": 0,
|
|
74
|
+
"rot4dYZ": 0,
|
|
75
|
+
"rot4dXW": 0.4,
|
|
76
|
+
"rot4dYW": 0.6,
|
|
77
|
+
"rot4dZW": 0.3
|
|
78
|
+
},
|
|
79
|
+
reactivity: {
|
|
80
|
+
"audio": {
|
|
81
|
+
"enabled": true,
|
|
82
|
+
"sensitivity": 1.2
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
};
|
|
86
|
+
|
|
87
|
+
const canvas = document.getElementById('vib3');
|
|
88
|
+
const gl = canvas.getContext('webgl') || canvas.getContext('experimental-webgl');
|
|
89
|
+
|
|
90
|
+
if (!gl) {
|
|
91
|
+
document.body.innerHTML = '<div style="color:#64ff96;padding:40px;text-align:center;"><h2>WebGL Required</h2><p>Please enable WebGL to view this visualization.</p></div>';
|
|
92
|
+
throw new Error('WebGL not supported');
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
// Compile shaders
|
|
96
|
+
function createShader(type, source) {
|
|
97
|
+
const shader = gl.createShader(type);
|
|
98
|
+
gl.shaderSource(shader, source);
|
|
99
|
+
gl.compileShader(shader);
|
|
100
|
+
if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) {
|
|
101
|
+
console.error('Shader error:', gl.getShaderInfoLog(shader));
|
|
102
|
+
return null;
|
|
103
|
+
}
|
|
104
|
+
return shader;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
const vs = createShader(gl.VERTEX_SHADER, `
|
|
108
|
+
attribute vec2 a_position;
|
|
109
|
+
void main() {
|
|
110
|
+
gl_Position = vec4(a_position, 0.0, 1.0);
|
|
111
|
+
}`);
|
|
112
|
+
const fs = createShader(gl.FRAGMENT_SHADER, `precision highp float;
|
|
113
|
+
|
|
114
|
+
uniform vec2 u_resolution;
|
|
115
|
+
uniform float u_time;
|
|
116
|
+
uniform vec2 u_mouse;
|
|
117
|
+
uniform float u_geometry;
|
|
118
|
+
uniform float u_gridDensity;
|
|
119
|
+
uniform float u_morphFactor;
|
|
120
|
+
uniform float u_chaos;
|
|
121
|
+
uniform float u_speed;
|
|
122
|
+
uniform float u_hue;
|
|
123
|
+
uniform float u_intensity;
|
|
124
|
+
uniform float u_saturation;
|
|
125
|
+
uniform float u_dimension;
|
|
126
|
+
uniform float u_rot4dXW;
|
|
127
|
+
uniform float u_rot4dYW;
|
|
128
|
+
uniform float u_rot4dZW;
|
|
129
|
+
uniform float u_mouseIntensity;
|
|
130
|
+
uniform float u_clickIntensity;
|
|
131
|
+
uniform float u_bass;
|
|
132
|
+
uniform float u_mid;
|
|
133
|
+
uniform float u_high;
|
|
134
|
+
|
|
135
|
+
// 4D rotation matrices
|
|
136
|
+
mat4 rotateXW(float theta) {
|
|
137
|
+
float c = cos(theta);
|
|
138
|
+
float s = sin(theta);
|
|
139
|
+
return mat4(c, 0.0, 0.0, -s, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, s, 0.0, 0.0, c);
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
mat4 rotateYW(float theta) {
|
|
143
|
+
float c = cos(theta);
|
|
144
|
+
float s = sin(theta);
|
|
145
|
+
return mat4(1.0, 0.0, 0.0, 0.0, 0.0, c, 0.0, -s, 0.0, 0.0, 1.0, 0.0, 0.0, s, 0.0, c);
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
mat4 rotateZW(float theta) {
|
|
149
|
+
float c = cos(theta);
|
|
150
|
+
float s = sin(theta);
|
|
151
|
+
return mat4(1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, c, -s, 0.0, 0.0, s, c);
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
vec3 project4Dto3D(vec4 p) {
|
|
155
|
+
float w = 2.5 / (2.5 + p.w);
|
|
156
|
+
return vec3(p.x * w, p.y * w, p.z * w);
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
// EXACT geometry functions from original VIB3+ Faceted system
|
|
160
|
+
float geometryFunction(vec4 p) {
|
|
161
|
+
int geomType = int(mod(u_geometry, 8.0));
|
|
162
|
+
float density = u_gridDensity * 0.08;
|
|
163
|
+
|
|
164
|
+
if (geomType == 0) {
|
|
165
|
+
// Tetrahedron lattice
|
|
166
|
+
vec4 pos = fract(p * density);
|
|
167
|
+
vec4 dist = min(pos, 1.0 - pos);
|
|
168
|
+
return min(min(dist.x, dist.y), min(dist.z, dist.w)) * u_morphFactor;
|
|
169
|
+
}
|
|
170
|
+
else if (geomType == 1) {
|
|
171
|
+
// Hypercube lattice
|
|
172
|
+
vec4 pos = fract(p * density);
|
|
173
|
+
vec4 dist = min(pos, 1.0 - pos);
|
|
174
|
+
float minDist = min(min(dist.x, dist.y), min(dist.z, dist.w));
|
|
175
|
+
return minDist * u_morphFactor;
|
|
176
|
+
}
|
|
177
|
+
else if (geomType == 2) {
|
|
178
|
+
// Sphere lattice
|
|
179
|
+
float r = length(p);
|
|
180
|
+
float spheres = abs(fract(r * density) - 0.5) * 2.0;
|
|
181
|
+
float theta = atan(p.y, p.x);
|
|
182
|
+
float harmonics = sin(theta * 3.0) * 0.2;
|
|
183
|
+
return (spheres + harmonics) * u_morphFactor;
|
|
184
|
+
}
|
|
185
|
+
else if (geomType == 3) {
|
|
186
|
+
// Torus lattice
|
|
187
|
+
float r1 = length(p.xy) - 2.0;
|
|
188
|
+
float torus = length(vec2(r1, p.z)) - 0.8;
|
|
189
|
+
float lattice = sin(p.x * density) * sin(p.y * density);
|
|
190
|
+
return (torus + lattice * 0.3) * u_morphFactor;
|
|
191
|
+
}
|
|
192
|
+
else if (geomType == 4) {
|
|
193
|
+
// Klein bottle lattice
|
|
194
|
+
float u = atan(p.y, p.x);
|
|
195
|
+
float v = atan(p.w, p.z);
|
|
196
|
+
float dist = length(p) - 2.0;
|
|
197
|
+
float lattice = sin(u * density) * sin(v * density);
|
|
198
|
+
return (dist + lattice * 0.4) * u_morphFactor;
|
|
199
|
+
}
|
|
200
|
+
else if (geomType == 5) {
|
|
201
|
+
// Fractal lattice
|
|
202
|
+
vec4 pos = fract(p * density);
|
|
203
|
+
pos = abs(pos * 2.0 - 1.0);
|
|
204
|
+
float dist = length(max(abs(pos) - 1.0, 0.0));
|
|
205
|
+
return dist * u_morphFactor;
|
|
206
|
+
}
|
|
207
|
+
else if (geomType == 6) {
|
|
208
|
+
// Wave lattice
|
|
209
|
+
float time = u_time * 0.001 * u_speed;
|
|
210
|
+
float wave1 = sin(p.x * density + time);
|
|
211
|
+
float wave2 = sin(p.y * density + time * 1.3);
|
|
212
|
+
float wave3 = sin(p.z * density * 0.8 + time * 0.7);
|
|
213
|
+
float interference = wave1 * wave2 * wave3;
|
|
214
|
+
return interference * u_morphFactor;
|
|
215
|
+
}
|
|
216
|
+
else {
|
|
217
|
+
// Crystal lattice (geomType == 7)
|
|
218
|
+
vec4 pos = fract(p * density) - 0.5;
|
|
219
|
+
float cube = max(max(abs(pos.x), abs(pos.y)), max(abs(pos.z), abs(pos.w)));
|
|
220
|
+
return cube * u_morphFactor;
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
void main() {
|
|
225
|
+
vec2 uv = (gl_FragCoord.xy - u_resolution.xy * 0.5) / min(u_resolution.x, u_resolution.y);
|
|
226
|
+
|
|
227
|
+
// 4D position with time animation
|
|
228
|
+
float timeSpeed = u_time * 0.0001 * u_speed;
|
|
229
|
+
vec4 pos = vec4(uv * 3.0, sin(timeSpeed * 3.0), cos(timeSpeed * 2.0));
|
|
230
|
+
pos.xy += (u_mouse - 0.5) * u_mouseIntensity * 2.0;
|
|
231
|
+
|
|
232
|
+
// Apply 4D rotations with audio reactivity
|
|
233
|
+
pos = rotateXW(u_rot4dXW + u_bass * 0.3) * pos;
|
|
234
|
+
pos = rotateYW(u_rot4dYW + u_mid * 0.2) * pos;
|
|
235
|
+
pos = rotateZW(u_rot4dZW + u_high * 0.25) * pos;
|
|
236
|
+
|
|
237
|
+
// Calculate geometry value
|
|
238
|
+
float value = geometryFunction(pos);
|
|
239
|
+
|
|
240
|
+
// Apply chaos
|
|
241
|
+
float noise = sin(pos.x * 7.0) * cos(pos.y * 11.0) * sin(pos.z * 13.0);
|
|
242
|
+
value += noise * (u_chaos + u_high * 0.2);
|
|
243
|
+
|
|
244
|
+
// Color based on geometry value and hue
|
|
245
|
+
float geometryIntensity = 1.0 - clamp(abs(value), 0.0, 1.0);
|
|
246
|
+
geometryIntensity += u_clickIntensity * 0.3;
|
|
247
|
+
|
|
248
|
+
float finalIntensity = geometryIntensity * u_intensity;
|
|
249
|
+
float hue = u_hue / 360.0 + value * 0.1 + u_mid * 0.1;
|
|
250
|
+
|
|
251
|
+
// Create color with saturation control
|
|
252
|
+
vec3 baseColor = vec3(
|
|
253
|
+
sin(hue * 6.28318 + 0.0) * 0.5 + 0.5,
|
|
254
|
+
sin(hue * 6.28318 + 2.0943) * 0.5 + 0.5,
|
|
255
|
+
sin(hue * 6.28318 + 4.1887) * 0.5 + 0.5
|
|
256
|
+
);
|
|
257
|
+
|
|
258
|
+
// Apply saturation
|
|
259
|
+
float gray = (baseColor.r + baseColor.g + baseColor.b) / 3.0;
|
|
260
|
+
vec3 color = mix(vec3(gray), baseColor, u_saturation) * finalIntensity;
|
|
261
|
+
|
|
262
|
+
gl_FragColor = vec4(color, finalIntensity * 0.9);
|
|
263
|
+
}`);
|
|
264
|
+
|
|
265
|
+
const program = gl.createProgram();
|
|
266
|
+
gl.attachShader(program, vs);
|
|
267
|
+
gl.attachShader(program, fs);
|
|
268
|
+
gl.linkProgram(program);
|
|
269
|
+
|
|
270
|
+
if (!gl.getProgramParameter(program, gl.LINK_STATUS)) {
|
|
271
|
+
console.error('Link error:', gl.getProgramInfoLog(program));
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
gl.useProgram(program);
|
|
275
|
+
|
|
276
|
+
// Fullscreen quad
|
|
277
|
+
const positions = new Float32Array([-1,-1, 1,-1, -1,1, 1,1]);
|
|
278
|
+
const buffer = gl.createBuffer();
|
|
279
|
+
gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
|
|
280
|
+
gl.bufferData(gl.ARRAY_BUFFER, positions, gl.STATIC_DRAW);
|
|
281
|
+
|
|
282
|
+
const posLoc = gl.getAttribLocation(program, 'a_position');
|
|
283
|
+
gl.enableVertexAttribArray(posLoc);
|
|
284
|
+
gl.vertexAttribPointer(posLoc, 2, gl.FLOAT, false, 0, 0);
|
|
285
|
+
|
|
286
|
+
// Get uniform locations
|
|
287
|
+
const uniforms = {};
|
|
288
|
+
const uniformNames = [
|
|
289
|
+
'u_time', 'u_resolution', 'u_mouse', 'u_geometry',
|
|
290
|
+
'u_gridDensity', 'u_morphFactor', 'u_chaos', 'u_speed',
|
|
291
|
+
'u_hue', 'u_intensity', 'u_saturation', 'u_dimension',
|
|
292
|
+
'u_rot4dXY', 'u_rot4dXZ', 'u_rot4dYZ',
|
|
293
|
+
'u_rot4dXW', 'u_rot4dYW', 'u_rot4dZW',
|
|
294
|
+
'u_mouseIntensity', 'u_clickIntensity',
|
|
295
|
+
'u_bass', 'u_mid', 'u_high'
|
|
296
|
+
];
|
|
297
|
+
uniformNames.forEach(name => {
|
|
298
|
+
uniforms[name] = gl.getUniformLocation(program, name);
|
|
299
|
+
});
|
|
300
|
+
|
|
301
|
+
// State
|
|
302
|
+
let mouseX = 0.5, mouseY = 0.5, mouseIntensity = 0, clickIntensity = 0;
|
|
303
|
+
let bass = 0, mid = 0, high = 0;
|
|
304
|
+
let audioContext, analyser, dataArray, audioEnabled = false;
|
|
305
|
+
const startTime = performance.now();
|
|
306
|
+
|
|
307
|
+
// Mouse tracking
|
|
308
|
+
document.addEventListener('mousemove', e => {
|
|
309
|
+
mouseX = e.clientX / window.innerWidth;
|
|
310
|
+
mouseY = 1 - e.clientY / window.innerHeight;
|
|
311
|
+
mouseIntensity = Math.min(1, mouseIntensity + 0.1);
|
|
312
|
+
});
|
|
313
|
+
document.addEventListener('click', () => {
|
|
314
|
+
clickIntensity = 1;
|
|
315
|
+
});
|
|
316
|
+
|
|
317
|
+
// Audio setup
|
|
318
|
+
window.toggleAudio = async function() {
|
|
319
|
+
if (audioEnabled) {
|
|
320
|
+
audioEnabled = false;
|
|
321
|
+
document.querySelector('.audio-btn').textContent = '🎵 Enable Audio';
|
|
322
|
+
return;
|
|
323
|
+
}
|
|
324
|
+
|
|
325
|
+
try {
|
|
326
|
+
const stream = await navigator.mediaDevices.getUserMedia({ audio: true });
|
|
327
|
+
audioContext = new AudioContext();
|
|
328
|
+
analyser = audioContext.createAnalyser();
|
|
329
|
+
analyser.fftSize = 256;
|
|
330
|
+
const source = audioContext.createMediaStreamSource(stream);
|
|
331
|
+
source.connect(analyser);
|
|
332
|
+
dataArray = new Uint8Array(analyser.frequencyBinCount);
|
|
333
|
+
audioEnabled = true;
|
|
334
|
+
document.querySelector('.audio-btn').textContent = '🔊 Audio Active';
|
|
335
|
+
} catch (e) {
|
|
336
|
+
console.log('Audio not available:', e);
|
|
337
|
+
alert('Could not access microphone');
|
|
338
|
+
}
|
|
339
|
+
};
|
|
340
|
+
|
|
341
|
+
function updateAudio() {
|
|
342
|
+
if (!audioEnabled || !analyser) return;
|
|
343
|
+
analyser.getByteFrequencyData(dataArray);
|
|
344
|
+
|
|
345
|
+
// Bass: 0-8, Mid: 8-32, High: 32-64
|
|
346
|
+
let bassSum = 0, midSum = 0, highSum = 0;
|
|
347
|
+
for (let i = 0; i < 8; i++) bassSum += dataArray[i];
|
|
348
|
+
for (let i = 8; i < 32; i++) midSum += dataArray[i];
|
|
349
|
+
for (let i = 32; i < 64; i++) highSum += dataArray[i];
|
|
350
|
+
|
|
351
|
+
bass = (bassSum / 8 / 255) * (CONFIG.reactivity?.audio?.sensitivity || 1);
|
|
352
|
+
mid = (midSum / 24 / 255) * (CONFIG.reactivity?.audio?.sensitivity || 1);
|
|
353
|
+
high = (highSum / 32 / 255) * (CONFIG.reactivity?.audio?.sensitivity || 1);
|
|
354
|
+
}
|
|
355
|
+
|
|
356
|
+
// Resize
|
|
357
|
+
function resize() {
|
|
358
|
+
const dpr = Math.min(window.devicePixelRatio, 2);
|
|
359
|
+
canvas.width = window.innerWidth * dpr;
|
|
360
|
+
canvas.height = window.innerHeight * dpr;
|
|
361
|
+
gl.viewport(0, 0, canvas.width, canvas.height);
|
|
362
|
+
}
|
|
363
|
+
window.addEventListener('resize', resize);
|
|
364
|
+
resize();
|
|
365
|
+
|
|
366
|
+
// Render loop
|
|
367
|
+
function render() {
|
|
368
|
+
const time = performance.now() - startTime;
|
|
369
|
+
|
|
370
|
+
updateAudio();
|
|
371
|
+
mouseIntensity *= 0.95;
|
|
372
|
+
clickIntensity *= 0.92;
|
|
373
|
+
|
|
374
|
+
gl.uniform1f(uniforms.u_time, time);
|
|
375
|
+
gl.uniform2f(uniforms.u_resolution, canvas.width, canvas.height);
|
|
376
|
+
gl.uniform2f(uniforms.u_mouse, mouseX, mouseY);
|
|
377
|
+
gl.uniform1f(uniforms.u_geometry, CONFIG.geometry);
|
|
378
|
+
gl.uniform1f(uniforms.u_gridDensity, CONFIG.params.gridDensity);
|
|
379
|
+
gl.uniform1f(uniforms.u_morphFactor, CONFIG.params.morphFactor);
|
|
380
|
+
gl.uniform1f(uniforms.u_chaos, CONFIG.params.chaos);
|
|
381
|
+
gl.uniform1f(uniforms.u_speed, CONFIG.params.speed);
|
|
382
|
+
gl.uniform1f(uniforms.u_hue, CONFIG.params.hue);
|
|
383
|
+
gl.uniform1f(uniforms.u_intensity, CONFIG.params.intensity);
|
|
384
|
+
gl.uniform1f(uniforms.u_saturation, CONFIG.params.saturation || 0.8);
|
|
385
|
+
gl.uniform1f(uniforms.u_dimension, CONFIG.params.dimension || 3.5);
|
|
386
|
+
gl.uniform1f(uniforms.u_rot4dXY, CONFIG.params.rot4dXY || 0);
|
|
387
|
+
gl.uniform1f(uniforms.u_rot4dXZ, CONFIG.params.rot4dXZ || 0);
|
|
388
|
+
gl.uniform1f(uniforms.u_rot4dYZ, CONFIG.params.rot4dYZ || 0);
|
|
389
|
+
gl.uniform1f(uniforms.u_rot4dXW, CONFIG.params.rot4dXW || 0);
|
|
390
|
+
gl.uniform1f(uniforms.u_rot4dYW, CONFIG.params.rot4dYW || 0);
|
|
391
|
+
gl.uniform1f(uniforms.u_rot4dZW, CONFIG.params.rot4dZW || 0);
|
|
392
|
+
gl.uniform1f(uniforms.u_mouseIntensity, mouseIntensity);
|
|
393
|
+
gl.uniform1f(uniforms.u_clickIntensity, clickIntensity);
|
|
394
|
+
gl.uniform1f(uniforms.u_bass, bass);
|
|
395
|
+
gl.uniform1f(uniforms.u_mid, mid);
|
|
396
|
+
gl.uniform1f(uniforms.u_high, high);
|
|
397
|
+
|
|
398
|
+
gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4);
|
|
399
|
+
requestAnimationFrame(render);
|
|
400
|
+
}
|
|
401
|
+
render();
|
|
402
|
+
|
|
403
|
+
console.log('VIB3+ FACETED visualization initialized');
|
|
404
|
+
console.log('Config:', CONFIG);
|
|
405
|
+
</script>
|
|
406
|
+
</body>
|
|
407
|
+
</html>
|