1
+ <!-- Github Luckystriike: https://github.com /luckystriike22/TresJsPlayground/ -->
2
+ <script lang="ts" setup>
3
+ import vertexShader from './shaders/vertex.glsl'
4
+ import fragmentShader from './shaders/fragment.glsl'
5
+
6
+ import { Vector2 } from 'three'
7
+
8
+ const props = defineProps<{
9
+ analyser: any
10
+ dataArray: any
11
+ }>()
12
+
13
+ // composables
14
+ const { onBeforeRender } = useLoop()
15
+
16
+ // refs
17
+ const blobRef = shallowRef<any>(null)
18
+
19
+
20
+ onBeforeRender(({ elapsed }) => {
21
+ if (blobRef.value && props.analyser && props.dataArray) {
22
+ props.analyser?.getByteFrequencyData(props.dataArray);
23
+
24
+ // calc average frequency
25
+ let sum = 0;
26
+ for (let i = 0; i < props.dataArray?.length; i++) {
27
+ sum += props.dataArray[i];
28
+ }
29
+
30
+ uniforms.value.u_frequency.value = sum > 0 ? sum / props.dataArray?.length : 0;
31
+ uniforms.value.u_time.value = elapsed
32
+ blobRef.value.rotation.x += 0.01
33
+ }
34
+ })
35
+
36
+
37
+ // shader
38
+ // set props to pass into the shader
39
+ const uniforms = ref({
40
+ u_resolution: { type: 'V2', value: new Vector2(window.innerWidth, window.innerHeight) },
41
+ u_time: { type: 'f', value: 0.0 },
42
+ u_frequency: { type: 'f', value: 0.0 },
43
+ u_amplitude: { type: 'f', value: 1.5 }
44
+ });
45
+
46
+
47
+ </script>
48
+
49
+ <template>
50
+ <TresPerspectiveCamera :position="[13, 0, 0]" />
51
+ <OrbitControls />
52
+ <TresMesh ref="blobRef">
53
+ <TresIcosahedronGeometry :args="[4, 80]"></TresIcosahedronGeometry>
54
+ <TresShaderMaterial wireframe :uniforms="uniforms" :fragment-shader="fragmentShader"
55
+ :vertex-shader="vertexShader" />
56
+ </TresMesh>
57
+ <TresDirectionalLight :position="[1, 1, 1]" />
58
+ <TresAmbientLight :intensity="1" />
59
+ </template>
60
+
61
+ <style scoped>
62
+ .gitBtn {
63
+ margin-bottom: 10px;
64
+ margin-right: 10px;
65
+ z-index: 10;
66
+ color: white;
67
+ }
68
+
69
+ .blobPermissionDialog {
70
+ height: 100vh;
71
+ justify-content: center;
72
+ display: flex;
73
+ background-color: #0c1a30;
74
+ width: 100vw;
75
+ color: white;
76
+ font-size: x-large;
77
+ }
78
+
79
+ .blobPermissionDialog p {
80
+ width: 700px;
81
+ }
82
+ </style>
0 commit comments