diff --git a/.vs/MusicVisuals/v16/.suo b/.vs/MusicVisuals/v16/.suo
new file mode 100644
index 000000000..f435460ff
Binary files /dev/null and b/.vs/MusicVisuals/v16/.suo differ
diff --git a/.vs/VSWorkspaceState.json b/.vs/VSWorkspaceState.json
new file mode 100644
index 000000000..6b6114114
--- /dev/null
+++ b/.vs/VSWorkspaceState.json
@@ -0,0 +1,6 @@
+{
+ "ExpandedNodes": [
+ ""
+ ],
+ "PreviewInSolutionExplorer": false
+}
\ No newline at end of file
diff --git a/.vs/slnx.sqlite b/.vs/slnx.sqlite
new file mode 100644
index 000000000..0a56c5a4a
Binary files /dev/null and b/.vs/slnx.sqlite differ
diff --git a/README.md b/README.md
index 19ba88c75..e7da76558 100644
--- a/README.md
+++ b/README.md
@@ -1,8 +1,10 @@
# Music Visualiser Project
-Name:
+Names:
+Ben Corran
-Student Number:
+Student Numbers:
+C21430484
## Instructions
- Fork this repository and use it a starter project for your assignment
diff --git a/java/.classpath b/java/.classpath
index 2e063e579..65d0c036f 100644
--- a/java/.classpath
+++ b/java/.classpath
@@ -22,5 +22,6 @@
+
diff --git a/java/.project b/java/.project
index 0d5afed93..ea43fe10f 100644
--- a/java/.project
+++ b/java/.project
@@ -16,12 +16,12 @@
- 1616413840733
+ 1682089555290
30
org.eclipse.core.resources.regexFilterMatcher
- node_modules|.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__
+ node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__
diff --git a/java/.vs/VSWorkspaceState.json b/java/.vs/VSWorkspaceState.json
new file mode 100644
index 000000000..6b6114114
--- /dev/null
+++ b/java/.vs/VSWorkspaceState.json
@@ -0,0 +1,6 @@
+{
+ "ExpandedNodes": [
+ ""
+ ],
+ "PreviewInSolutionExplorer": false
+}
\ No newline at end of file
diff --git a/java/.vs/java/v16/.suo b/java/.vs/java/v16/.suo
new file mode 100644
index 000000000..add29003e
Binary files /dev/null and b/java/.vs/java/v16/.suo differ
diff --git a/java/.vs/slnx.sqlite b/java/.vs/slnx.sqlite
new file mode 100644
index 000000000..c8aefa56e
Binary files /dev/null and b/java/.vs/slnx.sqlite differ
diff --git a/java/data/Genesis.mp3 b/java/data/Genesis.mp3
new file mode 100644
index 000000000..eab57d5ff
Binary files /dev/null and b/java/data/Genesis.mp3 differ
diff --git a/java/data/cross.obj b/java/data/cross.obj
new file mode 100644
index 000000000..6b3ed31fc
--- /dev/null
+++ b/java/data/cross.obj
@@ -0,0 +1,1184 @@
+# Blender 3.4.1
+# www.blender.org
+mtllib t.mtl
+o Cube.001
+v -29.974388 -31.395954 129.080490
+v -29.974388 -31.395954 119.080482
+v -29.974388 -21.395954 119.080490
+v -29.974388 -21.395956 129.080490
+v -40.133453 -31.395954 129.080490
+v -40.133453 -31.395954 119.080482
+v -40.133453 -21.395954 119.080490
+v -40.133453 -21.395956 129.080490
+v -29.974388 -31.395950 83.970757
+v -29.974388 -21.395948 83.970764
+v -40.133453 -31.395950 83.970757
+v -40.133453 -21.395948 83.970764
+v -29.974388 -31.395947 73.730415
+v -29.974388 -21.395947 73.730423
+v -40.133453 -31.395947 73.730415
+v -40.133453 -21.395947 73.730423
+v -99.624947 -31.395950 83.970757
+v -99.624947 -21.395948 83.970764
+v -99.624947 -31.395947 73.730415
+v -99.624947 -21.395947 73.730423
+v -110.109108 -31.395950 83.970757
+v -110.109108 -21.395948 83.970764
+v -110.109108 -31.395947 73.730415
+v -110.109108 -21.395947 73.730423
+v -99.624947 -31.395935 9.668348
+v -99.624947 -21.395937 9.668350
+v -110.109108 -31.395935 9.668348
+v -110.109108 -21.395937 9.668350
+v -99.624947 -31.395935 -1.526521
+v -99.624947 -21.395935 -1.526520
+v -110.109108 -31.395935 -1.526521
+v -110.109108 -21.395935 -1.526520
+v -42.403431 -31.395935 9.668348
+v -42.403431 -21.395937 9.668350
+v -42.403431 -31.395935 -1.526521
+v -42.403431 -21.395935 -1.526520
+v -40.169380 -31.395935 9.668348
+v -40.169380 -21.395937 9.668350
+v -40.169380 -31.395935 -1.526521
+v -40.169380 -21.395935 -1.526520
+v -30.057344 -31.395935 9.668348
+v -30.057344 -21.395937 9.668350
+v -30.057344 -31.395935 -1.526521
+v -30.057344 -21.395935 -1.526520
+v -40.169380 -31.395905 -191.668976
+v -40.169380 -21.395905 -191.668976
+v -30.057344 -31.395905 -191.668976
+v -30.057344 -21.395905 -191.668976
+v -40.169380 -31.395901 -203.968262
+v -40.169380 -21.395901 -203.968262
+v -30.057344 -31.395901 -203.968262
+v -30.057344 -21.395901 -203.968262
+v 1.372675 -31.395905 -191.668976
+v 1.372675 -21.395905 -191.668976
+v 1.372675 -31.395901 -203.968262
+v 1.372675 -21.395901 -203.968262
+v -29.974388 -21.395964 174.161407
+v -29.974388 -31.395962 174.161407
+v -40.133453 -21.395964 174.161407
+v -40.133453 -31.395962 174.161407
+v -29.974388 -21.395966 183.009064
+v -29.974388 -31.395966 183.009064
+v -40.133453 -21.395966 183.009064
+v -40.133453 -31.395966 183.009064
+v 9.693886 -21.395964 174.161407
+v 9.693886 -31.395962 174.161407
+v 9.693886 -21.395966 183.009064
+v 9.693886 -31.395966 183.009064
+v -30.077564 -31.395954 129.080490
+v -30.077564 -31.395954 119.080482
+v -30.077564 -21.395954 119.080490
+v -30.077564 -21.395956 129.080490
+v -40.114723 -31.395954 129.080490
+v -40.114723 -31.395954 119.080482
+v -40.114723 -21.395954 119.080490
+v -40.114723 -21.395956 129.080490
+v -30.077564 -21.395954 115.795967
+v -30.077564 -31.395954 115.795959
+v -40.114723 -21.395954 115.795967
+v -40.114723 -31.395954 115.795959
+v -29.974388 6.322852 174.161407
+v -40.133453 6.322852 174.161407
+v -29.974388 6.322851 183.009064
+v -40.133453 6.322851 183.009064
+v -29.974388 26.307875 174.161407
+v -40.133453 26.307875 174.161407
+v -29.974388 26.307873 183.009064
+v -40.133453 26.307873 183.009064
+v -29.974388 34.321785 174.161407
+v -40.133453 34.321785 174.161407
+v -29.974388 34.321781 183.009064
+v -40.133453 34.321781 183.009064
+v 12.598539 26.307875 174.161407
+v 12.598539 26.307873 183.009064
+v 12.598539 34.321785 174.161407
+v 12.598539 34.321781 183.009064
+v -29.974388 26.307875 174.161407
+v -40.133453 26.307875 174.161407
+v -29.974388 34.321785 174.161407
+v -40.133453 34.321785 174.161407
+v -40.133453 24.343004 83.970772
+v -29.974388 24.343004 83.970772
+v -40.133453 24.343006 73.730431
+v -29.974388 24.343006 73.730431
+v -29.974388 26.307890 84.037552
+v -40.133453 26.307890 84.037552
+v -29.974388 34.321796 84.037552
+v -40.133453 34.321796 84.037552
+v -29.974388 26.307892 73.878471
+v -40.133453 26.307892 73.878471
+v -29.974388 34.321800 73.878471
+v -40.133453 34.321800 73.878471
+v -99.733398 34.321796 84.037552
+v -99.733398 26.307890 84.037552
+v -99.733398 34.321800 73.878471
+v -99.733398 26.307892 73.878471
+v -110.061798 34.321796 84.037552
+v -110.061798 26.307890 84.037552
+v -110.061798 34.321800 73.878471
+v -110.061798 26.307892 73.878471
+v -99.733398 34.321812 9.537622
+v -99.733398 26.307901 9.537621
+v -110.061798 34.321812 9.537622
+v -110.061798 26.307901 9.537621
+v -99.733398 34.321812 -1.129416
+v -99.733398 26.307903 -1.129417
+v -110.061798 34.321812 -1.129416
+v -110.061798 26.307903 -1.129417
+v -40.189907 34.321812 9.537622
+v -40.189907 26.307901 9.537621
+v -40.189907 34.321812 -1.129416
+v -40.189907 26.307903 -1.129417
+v -30.454124 34.321812 9.537622
+v -30.454124 26.307901 9.537621
+v -30.454124 34.321812 -1.129416
+v -30.454124 26.307903 -1.129417
+v -40.189907 34.321842 -191.471069
+v -40.189907 26.307934 -191.471069
+v -30.454124 34.321842 -191.471069
+v -30.454124 26.307934 -191.471069
+v -40.189907 34.321846 -204.311035
+v -40.189907 26.307938 -204.311035
+v -30.454124 34.321846 -204.311035
+v -30.454124 26.307938 -204.311035
+v 18.540716 34.321842 -191.471069
+v 18.540716 26.307934 -191.471069
+v 18.540716 34.321846 -204.311035
+v 18.540716 26.307938 -204.311035
+v -40.189907 -22.053310 -191.471069
+v -30.454124 -22.053310 -191.471069
+v -40.189907 -22.053307 -204.311035
+v -30.454124 -22.053307 -204.311035
+v -40.189907 -24.937569 9.537613
+v -40.189907 -24.937567 -1.129426
+v -30.454124 -24.937569 9.537613
+v -30.454124 -24.937567 -1.129426
+v -99.733398 -25.410728 9.537613
+v -110.061798 -25.410728 9.537613
+v -99.733398 -25.410727 -1.129426
+v -110.061798 -25.410727 -1.129426
+v -99.733398 -24.563772 73.878456
+v -99.733398 -24.563774 84.037537
+v -110.061798 -24.563772 73.878456
+v -110.061798 -24.563774 84.037537
+v 29.974361 -31.395954 129.080490
+v 29.974361 -31.395954 119.080482
+v 29.974361 -21.395954 119.080490
+v 29.974361 -21.395956 129.080490
+v 40.133430 -31.395954 129.080490
+v 40.133430 -31.395954 119.080482
+v 40.133430 -21.395954 119.080490
+v 40.133430 -21.395956 129.080490
+v 29.974361 -31.395950 83.970757
+v 29.974361 -21.395948 83.970764
+v 40.133430 -31.395950 83.970757
+v 40.133430 -21.395948 83.970764
+v 29.974361 -31.395947 73.730415
+v 29.974361 -21.395947 73.730423
+v 40.133430 -31.395947 73.730415
+v 40.133430 -21.395947 73.730423
+v 99.624931 -31.395950 83.970757
+v 99.624931 -21.395948 83.970764
+v 99.624931 -31.395947 73.730415
+v 99.624931 -21.395947 73.730423
+v 110.109093 -31.395950 83.970757
+v 110.109093 -21.395948 83.970764
+v 110.109093 -31.395947 73.730415
+v 110.109093 -21.395947 73.730423
+v 99.624931 -31.395935 9.668348
+v 99.624931 -21.395937 9.668350
+v 110.109093 -31.395935 9.668348
+v 110.109093 -21.395937 9.668350
+v 99.624931 -31.395935 -1.526521
+v 99.624931 -21.395935 -1.526520
+v 110.109093 -31.395935 -1.526521
+v 110.109093 -21.395935 -1.526520
+v 42.403408 -31.395935 9.668348
+v 42.403408 -21.395937 9.668350
+v 42.403408 -31.395935 -1.526521
+v 42.403408 -21.395935 -1.526520
+v 40.169357 -31.395935 9.668348
+v 40.169357 -21.395937 9.668350
+v 40.169357 -31.395935 -1.526521
+v 40.169357 -21.395935 -1.526520
+v 30.057320 -31.395935 9.668348
+v 30.057320 -21.395937 9.668350
+v 30.057320 -31.395935 -1.526521
+v 30.057320 -21.395935 -1.526520
+v 40.169357 -31.395905 -191.668976
+v 40.169357 -21.395905 -191.668976
+v 30.057320 -31.395905 -191.668976
+v 30.057320 -21.395905 -191.668976
+v 40.169357 -31.395901 -203.968262
+v 40.169357 -21.395901 -203.968262
+v 30.057320 -31.395901 -203.968262
+v 30.057320 -21.395901 -203.968262
+v -1.372695 -31.395905 -191.668976
+v -1.372695 -21.395905 -191.668976
+v -1.372695 -31.395901 -203.968262
+v -1.372695 -21.395901 -203.968262
+v 29.974361 -21.395964 174.161407
+v 29.974361 -31.395962 174.161407
+v 40.133430 -21.395964 174.161407
+v 40.133430 -31.395962 174.161407
+v 29.974361 -21.395966 183.009064
+v 29.974361 -31.395966 183.009064
+v 40.133430 -21.395966 183.009064
+v 40.133430 -31.395966 183.009064
+v -9.693904 -21.395964 174.161407
+v -9.693904 -31.395962 174.161407
+v -9.693904 -21.395966 183.009064
+v -9.693904 -31.395966 183.009064
+v 30.077538 -31.395954 129.080490
+v 30.077538 -31.395954 119.080482
+v 30.077538 -21.395954 119.080490
+v 30.077538 -21.395956 129.080490
+v 40.114700 -31.395954 129.080490
+v 40.114700 -31.395954 119.080482
+v 40.114700 -21.395954 119.080490
+v 40.114700 -21.395956 129.080490
+v 30.077538 -21.395954 115.795967
+v 30.077538 -31.395954 115.795959
+v 40.114700 -21.395954 115.795967
+v 40.114700 -31.395954 115.795959
+v 29.974361 6.322852 174.161407
+v 40.133430 6.322852 174.161407
+v 29.974361 6.322851 183.009064
+v 40.133430 6.322851 183.009064
+v 29.974361 26.307875 174.161407
+v 40.133430 26.307875 174.161407
+v 29.974361 26.307873 183.009064
+v 40.133430 26.307873 183.009064
+v 29.974361 34.321785 174.161407
+v 40.133430 34.321785 174.161407
+v 29.974361 34.321781 183.009064
+v 40.133430 34.321781 183.009064
+v -12.598557 26.307875 174.161407
+v -12.598557 26.307873 183.009064
+v -12.598557 34.321785 174.161407
+v -12.598557 34.321781 183.009064
+v 29.974361 26.307875 174.161407
+v 40.133430 26.307875 174.161407
+v 29.974361 34.321785 174.161407
+v 40.133430 34.321785 174.161407
+v 40.133430 24.343004 83.970772
+v 29.974361 24.343004 83.970772
+v 40.133430 24.343006 73.730431
+v 29.974361 24.343006 73.730431
+v 29.974361 26.307890 84.037552
+v 40.133430 26.307890 84.037552
+v 29.974361 34.321796 84.037552
+v 40.133430 34.321796 84.037552
+v 29.974361 26.307892 73.878471
+v 40.133430 26.307892 73.878471
+v 29.974361 34.321800 73.878471
+v 40.133430 34.321800 73.878471
+v 99.733383 34.321796 84.037552
+v 99.733383 26.307890 84.037552
+v 99.733383 34.321800 73.878471
+v 99.733383 26.307892 73.878471
+v 110.061783 34.321796 84.037552
+v 110.061783 26.307890 84.037552
+v 110.061783 34.321800 73.878471
+v 110.061783 26.307892 73.878471
+v 99.733383 34.321812 9.537622
+v 99.733383 26.307901 9.537621
+v 110.061783 34.321812 9.537622
+v 110.061783 26.307901 9.537621
+v 99.733383 34.321812 -1.129416
+v 99.733383 26.307903 -1.129417
+v 110.061783 34.321812 -1.129416
+v 110.061783 26.307903 -1.129417
+v 40.189884 34.321812 9.537622
+v 40.189884 26.307901 9.537621
+v 40.189884 34.321812 -1.129416
+v 40.189884 26.307903 -1.129417
+v 30.454098 34.321812 9.537622
+v 30.454098 26.307901 9.537621
+v 30.454098 34.321812 -1.129416
+v 30.454098 26.307903 -1.129417
+v 40.189884 34.321842 -191.471069
+v 40.189884 26.307934 -191.471069
+v 30.454098 34.321842 -191.471069
+v 30.454098 26.307934 -191.471069
+v 40.189884 34.321846 -204.311035
+v 40.189884 26.307938 -204.311035
+v 30.454098 34.321846 -204.311035
+v 30.454098 26.307938 -204.311035
+v -18.540743 34.321842 -191.471069
+v -18.540743 26.307934 -191.471069
+v -18.540743 34.321846 -204.311035
+v -18.540743 26.307938 -204.311035
+v 40.189884 -22.053310 -191.471069
+v 30.454098 -22.053310 -191.471069
+v 40.189884 -22.053307 -204.311035
+v 30.454098 -22.053307 -204.311035
+v 40.189884 -24.937569 9.537613
+v 40.189884 -24.937567 -1.129426
+v 30.454098 -24.937569 9.537613
+v 30.454098 -24.937567 -1.129426
+v 99.733383 -25.410728 9.537613
+v 110.061783 -25.410728 9.537613
+v 99.733383 -25.410727 -1.129426
+v 110.061783 -25.410727 -1.129426
+v 99.733383 -24.563772 73.878456
+v 99.733383 -24.563774 84.037537
+v 110.061783 -24.563772 73.878456
+v 110.061783 -24.563774 84.037537
+vn -0.0000 1.0000 -0.0000
+vn -0.0000 -0.0000 -1.0000
+vn 1.0000 -0.0000 -0.0000
+vn -1.0000 -0.0000 -0.0000
+vn -0.0000 -1.0000 -0.0000
+vn -0.0000 -0.0000 1.0000
+vt 0.125000 0.500000
+vt 0.375000 0.250000
+vt 0.125000 0.750000
+vt 0.375000 1.000000
+vt 0.625000 1.000000
+vt 0.875000 0.750000
+vt 0.625000 0.250000
+vt 0.875000 0.500000
+vt 0.125000 0.500000
+vt 0.375000 0.250000
+vt 0.375000 0.000000
+vt 0.125000 0.750000
+vt 0.625000 0.000000
+vt 0.875000 0.750000
+vt 0.875000 0.500000
+vt 0.625000 0.250000
+vt 0.375000 1.000000
+vt 0.125000 0.750000
+vt 0.875000 0.750000
+vt 0.625000 1.000000
+vt 0.125000 0.750000
+vt 0.375000 0.000000
+vt 0.625000 0.000000
+vt 0.875000 0.750000
+vt 0.375000 1.000000
+vt 0.125000 0.750000
+vt 0.625000 1.000000
+vt 0.125000 0.750000
+vt 0.375000 1.000000
+vt 0.875000 0.750000
+vt 0.625000 1.000000
+vt 0.375000 0.000000
+vt 0.125000 0.750000
+vt 0.875000 0.750000
+vt 0.625000 0.000000
+vt 0.125000 0.750000
+vt 0.375000 1.000000
+vt 0.875000 0.750000
+vt 0.625000 1.000000
+vt 0.375000 0.000000
+vt 0.125000 0.750000
+vt 0.875000 0.750000
+vt 0.625000 0.000000
+vt 0.125000 0.750000
+vt 0.375000 0.000000
+vt 0.875000 0.750000
+vt 0.625000 0.000000
+vt 0.375000 1.000000
+vt 0.125000 0.750000
+vt 0.875000 0.750000
+vt 0.625000 1.000000
+vt 0.125000 0.750000
+vt 0.375000 0.000000
+vt 0.625000 0.000000
+vt 0.875000 0.750000
+vt 0.125000 0.750000
+vt 0.375000 1.000000
+vt 0.875000 0.750000
+vt 0.625000 1.000000
+vt 0.125000 0.750000
+vt 0.375000 1.000000
+vt 0.375000 0.000000
+vt 0.625000 1.000000
+vt 0.625000 0.000000
+vt 0.875000 0.750000
+vt 0.125000 0.750000
+vt 0.375000 1.000000
+vt 0.625000 1.000000
+vt 0.875000 0.750000
+vt 0.125000 0.750000
+vt 0.375000 1.000000
+vt 0.875000 0.750000
+vt 0.625000 1.000000
+vt 0.125000 0.750000
+vt 0.375000 1.000000
+vt 0.625000 1.000000
+vt 0.875000 0.750000
+vt 0.125000 0.750000
+vt 0.375000 1.000000
+vt 0.875000 0.750000
+vt 0.625000 1.000000
+vt 0.125000 0.750000
+vt 0.375000 1.000000
+vt 0.625000 1.000000
+vt 0.875000 0.750000
+vt 0.125000 0.750000
+vt 0.375000 1.000000
+vt 0.875000 0.750000
+vt 0.625000 1.000000
+vt 0.125000 0.750000
+vt 0.375000 1.000000
+vt 0.875000 0.750000
+vt 0.625000 1.000000
+vt 0.125000 0.750000
+vt 0.375000 1.000000
+vt 0.625000 1.000000
+vt 0.875000 0.750000
+vt 0.125000 0.750000
+vt 0.375000 1.000000
+vt 0.875000 0.750000
+vt 0.625000 1.000000
+vt 0.125000 0.750000
+vt 0.375000 1.000000
+vt 0.875000 0.750000
+vt 0.625000 1.000000
+vt 0.125000 0.750000
+vt 0.375000 1.000000
+vt 0.625000 1.000000
+vt 0.875000 0.750000
+vt 0.125000 0.750000
+vt 0.375000 1.000000
+vt 0.875000 0.750000
+vt 0.625000 1.000000
+vt 0.625000 0.250000
+vt 0.875000 0.500000
+vt 0.375000 0.250000
+vt 0.125000 0.500000
+vt 0.875000 0.500000
+vt 0.625000 0.250000
+vt 0.125000 0.500000
+vt 0.375000 0.250000
+vt 0.875000 0.500000
+vt 0.625000 0.250000
+vt 0.125000 0.500000
+vt 0.375000 0.250000
+vt 0.625000 0.250000
+vt 0.125000 0.500000
+vt 0.375000 0.250000
+vt 0.625000 0.250000
+vt 0.875000 0.500000
+vt 0.375000 0.250000
+vt 0.125000 0.500000
+vt 0.875000 0.500000
+vt 0.625000 0.250000
+vt 0.125000 0.500000
+vt 0.375000 0.250000
+vt 0.000000 0.000000
+vt 0.375000 0.250000
+vt 0.375000 0.000000
+vt 0.625000 0.000000
+vt 0.000000 0.000000
+vt 0.625000 0.250000
+vt 0.000000 0.000000
+vt 0.375000 0.000000
+vt 0.625000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.625000 0.250000
+vt 0.000000 0.000000
+vt 0.375000 0.250000
+vt 0.625000 0.250000
+vt 0.000000 0.000000
+vt 0.375000 0.250000
+vt 0.000000 0.000000
+vt 0.875000 0.500000
+vt 0.625000 0.250000
+vt 0.875000 0.500000
+vt 0.625000 0.250000
+vt 0.875000 0.500000
+vt 0.625000 0.250000
+vt 0.875000 0.500000
+vt 0.875000 0.500000
+vt 0.625000 0.250000
+vt 0.875000 0.500000
+vt 0.625000 0.250000
+vt 0.625000 0.250000
+vt 0.875000 0.500000
+vt 0.625000 0.250000
+vt 0.875000 0.500000
+vt 0.875000 0.500000
+vt 0.625000 0.250000
+vt 0.875000 0.500000
+vt 0.625000 0.250000
+vt 0.875000 0.500000
+vt 0.875000 0.500000
+vt 0.625000 0.250000
+vt 0.875000 0.500000
+vt 0.875000 0.500000
+vt 0.625000 0.250000
+vt 0.875000 0.500000
+vt 0.625000 0.250000
+vt 0.875000 0.500000
+vt 0.875000 0.500000
+vt 0.625000 0.250000
+vt 0.875000 0.500000
+vt 0.875000 0.750000
+vt 0.875000 0.750000
+vt 0.625000 1.000000
+vt 0.875000 0.750000
+vt 0.625000 1.000000
+vt 0.875000 0.750000
+vt 0.625000 1.000000
+vt 0.875000 0.500000
+vt 0.625000 0.250000
+vt 0.875000 0.500000
+vt 0.875000 0.500000
+vt 0.625000 0.250000
+vt 0.875000 0.500000
+vt 0.875000 0.500000
+vt 0.875000 0.500000
+vt 0.875000 0.500000
+vt 0.875000 0.500000
+vt 0.625000 0.250000
+vt 0.875000 0.500000
+vt 0.875000 0.500000
+vt 0.625000 0.250000
+vt 0.875000 0.500000
+vt 0.875000 0.500000
+vt 0.625000 0.250000
+vt 0.875000 0.500000
+vt 0.625000 0.250000
+vt 0.875000 0.500000
+vt 0.625000 0.250000
+vt 0.875000 0.500000
+vt 0.625000 0.250000
+vt 0.875000 0.500000
+vt 0.875000 0.500000
+vt 0.625000 0.250000
+vt 0.875000 0.500000
+vt 0.625000 0.250000
+vt 0.875000 0.500000
+vt 0.875000 0.500000
+vt 0.875000 0.500000
+vt 0.625000 0.250000
+vt 0.875000 0.500000
+vt 0.625000 0.250000
+vt 0.875000 0.500000
+vt 0.875000 0.500000
+vt 0.875000 0.500000
+vt 0.875000 0.500000
+vt 0.875000 0.500000
+vt 0.875000 0.500000
+vt 0.875000 0.500000
+vt 0.875000 0.500000
+vt 0.875000 0.500000
+vt 0.875000 0.500000
+vt 0.875000 0.500000
+vt 0.875000 0.500000
+vt 0.875000 0.500000
+vt 0.875000 0.500000
+vt 0.875000 0.500000
+vt 0.875000 0.500000
+vt 0.875000 0.500000
+vt 0.875000 0.500000
+vt 0.875000 0.500000
+vt 0.875000 0.500000
+vt 0.875000 0.500000
+vt 0.875000 0.500000
+vt 0.875000 0.500000
+vt 0.875000 0.500000
+vt 0.875000 0.500000
+vt 0.875000 0.500000
+vt 0.875000 0.500000
+vt 0.875000 0.500000
+vt 0.875000 0.500000
+vt 0.875000 0.500000
+vt 0.625000 0.250000
+vt 0.875000 0.500000
+vt 0.875000 0.500000
+vt 0.625000 0.250000
+vt 0.875000 0.500000
+vt 0.875000 0.500000
+vt 0.875000 0.500000
+vt 0.625000 0.250000
+vt 0.875000 0.500000
+vt 0.625000 0.250000
+vt 0.875000 0.500000
+vt 0.625000 0.250000
+vt 0.125000 0.500000
+vt 0.375000 0.250000
+vt 0.125000 0.750000
+vt 0.375000 1.000000
+vt 0.625000 1.000000
+vt 0.875000 0.750000
+vt 0.625000 0.250000
+vt 0.875000 0.500000
+vt 0.125000 0.500000
+vt 0.375000 0.250000
+vt 0.375000 0.000000
+vt 0.125000 0.750000
+vt 0.625000 0.000000
+vt 0.875000 0.750000
+vt 0.875000 0.500000
+vt 0.625000 0.250000
+vt 0.375000 1.000000
+vt 0.125000 0.750000
+vt 0.875000 0.750000
+vt 0.625000 1.000000
+vt 0.125000 0.750000
+vt 0.375000 0.000000
+vt 0.625000 0.000000
+vt 0.875000 0.750000
+vt 0.375000 1.000000
+vt 0.125000 0.750000
+vt 0.625000 1.000000
+vt 0.125000 0.750000
+vt 0.375000 1.000000
+vt 0.875000 0.750000
+vt 0.625000 1.000000
+vt 0.375000 0.000000
+vt 0.125000 0.750000
+vt 0.875000 0.750000
+vt 0.625000 0.000000
+vt 0.125000 0.750000
+vt 0.375000 1.000000
+vt 0.875000 0.750000
+vt 0.625000 1.000000
+vt 0.375000 0.000000
+vt 0.125000 0.750000
+vt 0.875000 0.750000
+vt 0.625000 0.000000
+vt 0.125000 0.750000
+vt 0.375000 0.000000
+vt 0.875000 0.750000
+vt 0.625000 0.000000
+vt 0.375000 1.000000
+vt 0.125000 0.750000
+vt 0.875000 0.750000
+vt 0.625000 1.000000
+vt 0.125000 0.750000
+vt 0.375000 0.000000
+vt 0.625000 0.000000
+vt 0.875000 0.750000
+vt 0.125000 0.750000
+vt 0.375000 1.000000
+vt 0.875000 0.750000
+vt 0.625000 1.000000
+vt 0.125000 0.750000
+vt 0.375000 1.000000
+vt 0.375000 0.000000
+vt 0.625000 1.000000
+vt 0.625000 0.000000
+vt 0.875000 0.750000
+vt 0.125000 0.750000
+vt 0.375000 1.000000
+vt 0.625000 1.000000
+vt 0.875000 0.750000
+vt 0.125000 0.750000
+vt 0.375000 1.000000
+vt 0.875000 0.750000
+vt 0.625000 1.000000
+vt 0.125000 0.750000
+vt 0.375000 1.000000
+vt 0.625000 1.000000
+vt 0.875000 0.750000
+vt 0.125000 0.750000
+vt 0.375000 1.000000
+vt 0.875000 0.750000
+vt 0.625000 1.000000
+vt 0.125000 0.750000
+vt 0.375000 1.000000
+vt 0.625000 1.000000
+vt 0.875000 0.750000
+vt 0.125000 0.750000
+vt 0.375000 1.000000
+vt 0.875000 0.750000
+vt 0.625000 1.000000
+vt 0.125000 0.750000
+vt 0.375000 1.000000
+vt 0.875000 0.750000
+vt 0.625000 1.000000
+vt 0.125000 0.750000
+vt 0.375000 1.000000
+vt 0.625000 1.000000
+vt 0.875000 0.750000
+vt 0.125000 0.750000
+vt 0.375000 1.000000
+vt 0.875000 0.750000
+vt 0.625000 1.000000
+vt 0.125000 0.750000
+vt 0.375000 1.000000
+vt 0.875000 0.750000
+vt 0.625000 1.000000
+vt 0.125000 0.750000
+vt 0.375000 1.000000
+vt 0.625000 1.000000
+vt 0.875000 0.750000
+vt 0.125000 0.750000
+vt 0.375000 1.000000
+vt 0.875000 0.750000
+vt 0.625000 1.000000
+vt 0.625000 0.250000
+vt 0.875000 0.500000
+vt 0.375000 0.250000
+vt 0.125000 0.500000
+vt 0.875000 0.500000
+vt 0.625000 0.250000
+vt 0.125000 0.500000
+vt 0.375000 0.250000
+vt 0.875000 0.500000
+vt 0.625000 0.250000
+vt 0.125000 0.500000
+vt 0.375000 0.250000
+vt 0.625000 0.250000
+vt 0.125000 0.500000
+vt 0.375000 0.250000
+vt 0.625000 0.250000
+vt 0.875000 0.500000
+vt 0.375000 0.250000
+vt 0.125000 0.500000
+vt 0.875000 0.500000
+vt 0.625000 0.250000
+vt 0.125000 0.500000
+vt 0.375000 0.250000
+vt 0.000000 0.000000
+vt 0.375000 0.250000
+vt 0.375000 0.000000
+vt 0.625000 0.000000
+vt 0.000000 0.000000
+vt 0.625000 0.250000
+vt 0.000000 0.000000
+vt 0.375000 0.000000
+vt 0.625000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.625000 0.250000
+vt 0.000000 0.000000
+vt 0.375000 0.250000
+vt 0.625000 0.250000
+vt 0.000000 0.000000
+vt 0.375000 0.250000
+vt 0.000000 0.000000
+vt 0.875000 0.500000
+vt 0.625000 0.250000
+vt 0.875000 0.500000
+vt 0.625000 0.250000
+vt 0.875000 0.500000
+vt 0.625000 0.250000
+vt 0.875000 0.500000
+vt 0.875000 0.500000
+vt 0.625000 0.250000
+vt 0.875000 0.500000
+vt 0.625000 0.250000
+vt 0.625000 0.250000
+vt 0.875000 0.500000
+vt 0.625000 0.250000
+vt 0.875000 0.500000
+vt 0.875000 0.500000
+vt 0.625000 0.250000
+vt 0.875000 0.500000
+vt 0.625000 0.250000
+vt 0.875000 0.500000
+vt 0.875000 0.500000
+vt 0.625000 0.250000
+vt 0.875000 0.500000
+vt 0.875000 0.500000
+vt 0.625000 0.250000
+vt 0.875000 0.500000
+vt 0.625000 0.250000
+vt 0.875000 0.500000
+vt 0.875000 0.500000
+vt 0.625000 0.250000
+vt 0.875000 0.500000
+vt 0.875000 0.750000
+vt 0.875000 0.750000
+vt 0.625000 1.000000
+vt 0.875000 0.750000
+vt 0.625000 1.000000
+vt 0.875000 0.750000
+vt 0.625000 1.000000
+vt 0.875000 0.500000
+vt 0.625000 0.250000
+vt 0.875000 0.500000
+vt 0.875000 0.500000
+vt 0.625000 0.250000
+vt 0.875000 0.500000
+vt 0.875000 0.500000
+vt 0.875000 0.500000
+vt 0.875000 0.500000
+vt 0.875000 0.500000
+vt 0.625000 0.250000
+vt 0.875000 0.500000
+vt 0.875000 0.500000
+vt 0.625000 0.250000
+vt 0.875000 0.500000
+vt 0.875000 0.500000
+vt 0.625000 0.250000
+vt 0.875000 0.500000
+vt 0.625000 0.250000
+vt 0.875000 0.500000
+vt 0.625000 0.250000
+vt 0.875000 0.500000
+vt 0.625000 0.250000
+vt 0.875000 0.500000
+vt 0.875000 0.500000
+vt 0.625000 0.250000
+vt 0.875000 0.500000
+vt 0.625000 0.250000
+vt 0.875000 0.500000
+vt 0.875000 0.500000
+vt 0.875000 0.500000
+vt 0.625000 0.250000
+vt 0.875000 0.500000
+vt 0.625000 0.250000
+vt 0.875000 0.500000
+vt 0.875000 0.500000
+vt 0.875000 0.500000
+vt 0.875000 0.500000
+vt 0.875000 0.500000
+vt 0.875000 0.500000
+vt 0.875000 0.500000
+vt 0.875000 0.500000
+vt 0.875000 0.500000
+vt 0.875000 0.500000
+vt 0.875000 0.500000
+vt 0.875000 0.500000
+vt 0.875000 0.500000
+vt 0.875000 0.500000
+vt 0.875000 0.500000
+vt 0.875000 0.500000
+vt 0.875000 0.500000
+vt 0.875000 0.500000
+vt 0.875000 0.500000
+vt 0.875000 0.500000
+vt 0.875000 0.500000
+vt 0.875000 0.500000
+vt 0.875000 0.500000
+vt 0.875000 0.500000
+vt 0.875000 0.500000
+vt 0.875000 0.500000
+vt 0.875000 0.500000
+vt 0.875000 0.500000
+vt 0.875000 0.500000
+vt 0.875000 0.500000
+vt 0.625000 0.250000
+vt 0.875000 0.500000
+vt 0.875000 0.500000
+vt 0.625000 0.250000
+vt 0.875000 0.500000
+vt 0.875000 0.500000
+vt 0.875000 0.500000
+vt 0.625000 0.250000
+vt 0.875000 0.500000
+vt 0.625000 0.250000
+vt 0.875000 0.500000
+vt 0.625000 0.250000
+s 0
+usemtl Material.001
+f 76/146/1 72/141/1 77/147/1 79/152/1
+f 6/11/2 7/13/2 71/140/2 70/139/2
+f 7/13/3 6/11/3 11/22/3 12/23/3
+f 1/1/1 5/9/1 60/120/1 58/117/1
+f 77/148/2 78/150/2 80/153/2 79/151/2
+f 10/19/2 12/24/2 101/186/2 102/187/2
+f 6/12/1 2/3/1 9/18/1 11/21/1
+f 2/4/4 3/5/4 10/20/4 9/17/4
+f 3/6/5 7/14/5 12/24/5 10/19/5
+f 13/25/6 14/27/6 16/31/6 15/29/6
+f 9/17/4 10/20/4 14/27/4 13/25/4
+f 11/21/1 9/18/1 13/26/1 15/28/1
+f 11/21/1 15/28/1 19/36/1 17/33/1
+f 20/38/5 18/34/5 22/42/5 24/46/5
+f 15/29/6 16/31/6 20/39/6 19/37/6
+f 12/23/2 11/22/2 17/32/2 18/35/2
+f 16/30/5 12/24/5 18/34/5 20/38/5
+f 22/43/3 21/40/3 23/45/3 24/47/3
+f 18/35/2 17/32/2 21/40/2 22/43/2
+f 17/33/1 19/36/1 23/44/1 21/41/1
+f 23/44/1 19/36/1 25/49/1 27/52/1
+f 27/52/1 25/49/1 29/56/1 31/60/1
+f 20/38/5 24/46/5 28/55/5 26/50/5
+f 24/47/3 23/45/3 27/53/3 28/54/3
+f 19/37/4 20/39/4 26/51/4 25/48/4
+f 29/57/6 30/59/6 32/63/6 31/61/6
+f 28/54/3 27/53/3 31/62/3 32/64/3
+f 26/50/5 28/55/5 32/65/5 30/58/5
+f 26/50/5 30/58/5 36/72/5 34/69/5
+f 35/70/1 33/66/1 37/74/1 39/78/1
+f 25/48/2 26/51/2 34/68/2 33/67/2
+f 29/56/1 25/49/1 33/66/1 35/70/1
+f 30/59/6 29/57/6 35/71/6 36/73/6
+f 39/78/1 37/74/1 41/82/1 43/86/1
+f 33/67/2 34/68/2 38/76/2 37/75/2
+f 34/69/5 36/72/5 40/80/5 38/77/5
+f 36/73/6 35/71/6 39/79/6 40/81/6
+f 41/83/4 42/84/4 44/89/4 43/87/4
+f 37/75/2 38/76/2 42/84/2 41/83/2
+f 38/77/5 40/80/5 44/88/5 42/85/5
+f 44/88/5 40/80/5 46/92/5 48/97/5
+f 48/97/5 46/92/5 50/100/5 52/104/5
+f 39/78/1 43/86/1 47/94/1 45/90/1
+f 43/87/4 44/89/4 48/96/4 47/95/4
+f 40/81/3 39/79/3 45/91/3 46/93/3
+f 50/101/6 49/99/6 51/103/6 52/105/6
+f 51/102/1 47/94/1 53/106/1 55/110/1
+f 45/90/1 47/94/1 51/102/1 49/98/1
+f 46/93/3 45/91/3 49/99/3 50/101/3
+f 53/107/4 54/108/4 56/113/4 55/111/4
+f 47/95/2 48/96/2 54/108/2 53/107/2
+f 48/97/5 52/104/5 56/112/5 54/109/5
+f 52/105/6 51/103/6 55/111/6 56/113/6
+f 57/115/4 61/122/4 83/159/4 81/155/4
+f 4/7/4 1/2/4 58/116/4 57/114/4
+f 8/15/5 4/8/5 57/115/5 59/118/5
+f 5/10/3 8/16/3 59/119/3 60/121/3
+f 61/123/2 62/125/2 64/128/2 63/126/2
+f 57/114/6 58/116/6 66/131/6 65/129/6
+f 58/117/1 60/120/1 64/127/1 62/124/1
+f 60/121/3 59/119/3 63/126/3 64/128/3
+f 65/129/4 66/131/4 68/136/4 67/134/4
+f 58/117/1 62/124/1 68/135/1 66/132/1
+f 61/122/5 57/115/5 65/130/5 67/133/5
+f 62/125/2 61/123/2 67/134/2 68/136/2
+f 70/139/6 71/140/6 75/145/6 74/144/6
+f 8/16/6 5/10/6 69/138/6 72/142/6
+f 69/137/5 73/143/5 80/154/5 78/149/5
+f 72/142/3 69/138/3 78/150/3 77/148/3
+f 59/118/6 57/115/6 81/155/6 82/157/6
+f 73/143/4 76/146/4 79/152/4 80/154/4
+f 61/123/2 63/126/2 84/160/2 83/158/2
+f 84/160/3 82/156/3 86/163/3 88/166/3
+f 63/126/3 59/119/3 82/156/3 84/160/3
+f 91/170/5 89/167/5 95/177/5 96/178/5
+f 83/158/2 84/160/2 88/166/2 87/165/2
+f 81/155/4 83/159/4 87/164/4 85/161/4
+f 82/157/6 81/155/6 85/161/6 86/162/6
+f 90/169/5 89/167/5 91/170/5 92/172/5
+f 85/161/1 89/167/2 99/183/1 97/180/2
+f 88/166/3 86/163/3 90/168/3 92/173/3
+f 87/165/2 88/166/2 92/173/2 91/171/2
+f 93/174/4 94/175/4 96/178/4 95/177/4
+f 85/161/1 87/164/1 94/175/1 93/174/1
+f 89/167/6 85/161/6 93/174/6 95/177/6
+f 87/165/2 91/171/2 96/179/2 94/176/2
+f 100/184/3 98/181/3 106/194/3 108/197/3
+f 86/162/1 85/161/2 97/180/1 98/182/2
+f 90/168/1 86/163/2 98/181/1 100/184/2
+f 89/167/1 90/169/2 100/185/1 99/183/2
+f 102/187/5 101/186/5 103/189/5 104/191/5
+f 14/27/4 10/20/4 102/188/4 104/192/4
+f 12/24/3 16/30/3 103/189/3 101/186/3
+f 16/31/6 14/27/6 104/192/6 103/190/6
+f 106/195/1 105/193/1 109/199/1 110/200/1
+f 99/183/5 100/185/5 108/198/5 107/196/5
+f 97/180/4 99/183/4 107/196/4 105/193/4
+f 98/182/1 97/180/1 105/193/1 106/195/1
+f 110/200/6 109/199/6 111/201/6 112/202/6
+f 110/200/6 112/202/6 115/207/6 116/208/6
+f 107/196/5 108/198/5 112/202/5 111/201/5
+f 105/193/4 107/196/4 111/201/4 109/199/4
+f 114/205/4 116/208/4 161/262/4 162/263/4
+f 108/197/2 106/194/2 114/206/2 113/203/2
+f 112/202/5 108/198/5 113/204/5 115/207/5
+f 106/195/1 110/200/1 116/208/1 114/205/1
+f 117/209/3 118/211/3 120/215/3 119/213/3
+f 113/203/2 114/206/2 118/211/2 117/209/2
+f 115/207/5 113/204/5 117/210/5 119/212/5
+f 115/207/5 119/212/5 123/219/5 121/216/5
+f 123/218/3 124/220/3 128/226/3 127/224/3
+f 119/213/3 120/215/3 124/220/3 123/218/3
+f 116/208/4 115/207/4 121/216/4 122/217/4
+f 120/214/1 116/208/1 122/217/1 124/221/1
+f 126/223/6 125/222/6 127/225/6 128/227/6
+f 128/226/3 124/220/3 158/257/3 160/260/3
+f 125/222/6 126/223/6 132/231/6 131/230/6
+f 121/216/5 123/219/5 127/225/5 125/222/5
+f 129/228/5 131/230/5 135/234/5 133/232/5
+f 121/216/5 125/222/5 131/230/5 129/228/5
+f 122/217/2 121/216/2 129/228/2 130/229/2
+f 126/223/1 122/217/1 130/229/1 132/231/1
+f 134/233/4 133/232/4 135/234/4 136/235/4
+f 132/231/1 136/235/1 140/239/1 138/237/1
+f 136/235/6 132/231/6 154/253/6 156/255/6
+f 130/229/2 129/228/2 133/232/2 134/233/2
+f 139/238/5 137/236/5 141/240/5 143/242/5
+f 131/230/3 132/231/3 138/237/3 137/236/3
+f 135/234/5 131/230/5 137/236/5 139/238/5
+f 136/235/4 135/234/4 139/238/4 140/239/4
+f 141/240/6 142/241/6 144/243/6 143/242/6
+f 137/236/3 138/237/3 142/241/3 141/240/3
+f 144/243/6 142/241/6 151/250/6 152/251/6
+f 139/238/5 143/242/5 147/246/5 145/244/5
+f 146/245/4 145/244/4 147/246/4 148/247/4
+f 143/242/6 144/243/6 148/247/6 147/246/6
+f 140/239/2 139/238/2 145/244/2 146/245/2
+f 144/243/1 140/239/1 146/245/1 148/247/1
+f 149/248/1 150/249/1 152/251/1 151/250/1
+f 138/237/2 140/239/2 150/249/2 149/248/2
+f 142/241/3 138/237/3 149/248/3 151/250/3
+f 140/239/4 144/243/4 152/251/4 150/249/4
+f 154/253/1 153/252/1 155/254/1 156/255/1
+f 134/233/4 136/235/4 156/255/4 155/254/4
+f 130/229/2 134/233/2 155/254/2 153/252/2
+f 132/231/3 130/229/3 153/252/3 154/253/3
+f 158/258/1 157/256/1 159/259/1 160/261/1
+f 126/223/6 128/227/6 160/261/6 159/259/6
+f 124/221/2 122/217/2 157/256/2 158/258/2
+f 122/217/4 126/223/4 159/259/4 157/256/4
+f 162/263/1 161/262/1 163/265/1 164/267/1
+f 118/211/2 114/206/2 162/264/2 164/268/2
+f 116/208/6 120/214/6 163/265/6 161/262/6
+f 120/215/3 118/211/3 164/268/3 163/266/3
+f 240/414/1 243/420/1 241/415/1 236/409/1
+f 170/279/2 234/407/2 235/408/2 171/281/2
+f 171/281/4 176/291/4 175/290/4 170/279/4
+f 165/269/1 222/385/1 224/388/1 169/277/1
+f 241/416/2 243/419/2 244/421/2 242/418/2
+f 174/287/2 266/455/2 265/454/2 176/292/2
+f 170/280/1 175/289/1 173/286/1 166/271/1
+f 166/272/3 173/285/3 174/288/3 167/273/3
+f 167/274/5 174/287/5 176/292/5 171/282/5
+f 177/293/6 179/297/6 180/299/6 178/295/6
+f 173/285/3 177/293/3 178/295/3 174/288/3
+f 175/289/1 179/296/1 177/294/1 173/286/1
+f 175/289/1 181/301/1 183/304/1 179/296/1
+f 184/306/5 188/314/5 186/310/5 182/302/5
+f 179/297/6 183/305/6 184/307/6 180/299/6
+f 176/291/2 182/303/2 181/300/2 175/290/2
+f 180/298/5 184/306/5 182/302/5 176/292/5
+f 186/311/4 188/315/4 187/313/4 185/308/4
+f 182/303/2 186/311/2 185/308/2 181/300/2
+f 181/301/1 185/309/1 187/312/1 183/304/1
+f 187/312/1 191/320/1 189/317/1 183/304/1
+f 191/320/1 195/328/1 193/324/1 189/317/1
+f 184/306/5 190/318/5 192/323/5 188/314/5
+f 188/315/4 192/322/4 191/321/4 187/313/4
+f 183/305/3 189/316/3 190/319/3 184/307/3
+f 193/325/6 195/329/6 196/331/6 194/327/6
+f 192/322/4 196/332/4 195/330/4 191/321/4
+f 190/318/5 194/326/5 196/333/5 192/323/5
+f 190/318/5 198/337/5 200/340/5 194/326/5
+f 199/338/1 203/346/1 201/342/1 197/334/1
+f 189/316/2 197/335/2 198/336/2 190/319/2
+f 193/324/1 199/338/1 197/334/1 189/317/1
+f 194/327/6 200/341/6 199/339/6 193/325/6
+f 203/346/1 207/354/1 205/350/1 201/342/1
+f 197/335/2 201/343/2 202/344/2 198/336/2
+f 198/337/5 202/345/5 204/348/5 200/340/5
+f 200/341/6 204/349/6 203/347/6 199/339/6
+f 205/351/3 207/355/3 208/357/3 206/352/3
+f 201/343/2 205/351/2 206/352/2 202/344/2
+f 202/345/5 206/353/5 208/356/5 204/348/5
+f 208/356/5 212/365/5 210/360/5 204/348/5
+f 212/365/5 216/372/5 214/368/5 210/360/5
+f 203/346/1 209/358/1 211/362/1 207/354/1
+f 207/355/3 211/363/3 212/364/3 208/357/3
+f 204/349/4 210/361/4 209/359/4 203/347/4
+f 214/369/6 216/373/6 215/371/6 213/367/6
+f 215/370/1 219/378/1 217/374/1 211/362/1
+f 209/358/1 213/366/1 215/370/1 211/362/1
+f 210/361/4 214/369/4 213/367/4 209/359/4
+f 217/375/3 219/379/3 220/381/3 218/376/3
+f 211/363/2 217/375/2 218/376/2 212/364/2
+f 212/365/5 218/377/5 220/380/5 216/372/5
+f 216/373/6 220/381/6 219/379/6 215/371/6
+f 221/383/3 245/423/3 247/427/3 225/390/3
+f 168/275/3 221/382/3 222/384/3 165/270/3
+f 172/283/5 223/386/5 221/383/5 168/276/5
+f 169/278/4 224/389/4 223/387/4 172/284/4
+f 225/391/2 227/394/2 228/396/2 226/393/2
+f 221/382/6 229/397/6 230/399/6 222/384/6
+f 222/385/1 226/392/1 228/395/1 224/388/1
+f 224/389/4 228/396/4 227/394/4 223/387/4
+f 229/397/3 231/402/3 232/404/3 230/399/3
+f 222/385/1 230/400/1 232/403/1 226/392/1
+f 225/390/5 231/401/5 229/398/5 221/383/5
+f 226/393/2 232/404/2 231/402/2 225/391/2
+f 234/407/6 238/412/6 239/413/6 235/408/6
+f 172/284/6 236/410/6 233/406/6 169/278/6
+f 233/405/5 242/417/5 244/422/5 237/411/5
+f 236/410/4 241/416/4 242/418/4 233/406/4
+f 223/386/6 246/425/6 245/423/6 221/383/6
+f 237/411/3 244/422/3 243/420/3 240/414/3
+f 225/391/2 247/426/2 248/428/2 227/394/2
+f 248/428/4 252/434/4 250/431/4 246/424/4
+f 227/394/4 248/428/4 246/424/4 223/387/4
+f 255/438/5 260/446/5 259/445/5 253/435/5
+f 247/426/2 251/433/2 252/434/2 248/428/2
+f 245/423/3 249/429/3 251/432/3 247/427/3
+f 246/425/6 250/430/6 249/429/6 245/423/6
+f 254/437/5 256/440/5 255/438/5 253/435/5
+f 249/429/2 261/448/1 263/451/2 253/435/1
+f 252/434/4 256/441/4 254/436/4 250/431/4
+f 251/433/2 255/439/2 256/441/2 252/434/2
+f 257/442/3 259/445/3 260/446/3 258/443/3
+f 249/429/1 257/442/1 258/443/1 251/432/1
+f 253/435/6 259/445/6 257/442/6 249/429/6
+f 251/433/2 258/444/2 260/447/2 255/439/2
+f 264/452/4 272/465/4 270/462/4 262/449/4
+f 250/430/2 262/450/1 261/448/2 249/429/1
+f 254/436/2 264/452/1 262/449/2 250/431/1
+f 253/435/2 263/451/1 264/453/2 254/437/1
+f 266/455/5 268/459/5 267/457/5 265/454/5
+f 178/295/3 268/460/3 266/456/3 174/288/3
+f 176/292/4 265/454/4 267/457/4 180/298/4
+f 180/299/6 267/458/6 268/460/6 178/295/6
+f 270/463/1 274/468/1 273/467/1 269/461/1
+f 263/451/5 271/464/5 272/466/5 264/453/5
+f 261/448/3 269/461/3 271/464/3 263/451/3
+f 262/450/1 270/463/1 269/461/1 261/448/1
+f 274/468/6 276/470/6 275/469/6 273/467/6
+f 274/468/6 280/476/6 279/475/6 276/470/6
+f 271/464/5 275/469/5 276/470/5 272/466/5
+f 269/461/3 273/467/3 275/469/3 271/464/3
+f 278/473/3 326/531/3 325/530/3 280/476/3
+f 272/465/2 277/471/2 278/474/2 270/462/2
+f 276/470/5 279/475/5 277/472/5 272/466/5
+f 270/463/1 278/473/1 280/476/1 274/468/1
+f 281/477/4 283/481/4 284/483/4 282/479/4
+f 277/471/2 281/477/2 282/479/2 278/474/2
+f 279/475/5 283/480/5 281/478/5 277/472/5
+f 279/475/5 285/484/5 287/487/5 283/480/5
+f 287/486/4 291/492/4 292/494/4 288/488/4
+f 283/481/4 287/486/4 288/488/4 284/483/4
+f 280/476/3 286/485/3 285/484/3 279/475/3
+f 284/482/1 288/489/1 286/485/1 280/476/1
+f 290/491/6 292/495/6 291/493/6 289/490/6
+f 292/494/4 324/528/4 322/525/4 288/488/4
+f 289/490/6 295/498/6 296/499/6 290/491/6
+f 285/484/5 289/490/5 291/493/5 287/487/5
+f 293/496/5 297/500/5 299/502/5 295/498/5
+f 285/484/5 293/496/5 295/498/5 289/490/5
+f 286/485/2 294/497/2 293/496/2 285/484/2
+f 290/491/1 296/499/1 294/497/1 286/485/1
+f 298/501/3 300/503/3 299/502/3 297/500/3
+f 296/499/1 302/505/1 304/507/1 300/503/1
+f 300/503/6 320/523/6 318/521/6 296/499/6
+f 294/497/2 298/501/2 297/500/2 293/496/2
+f 303/506/5 307/510/5 305/508/5 301/504/5
+f 295/498/4 301/504/4 302/505/4 296/499/4
+f 299/502/5 303/506/5 301/504/5 295/498/5
+f 300/503/3 304/507/3 303/506/3 299/502/3
+f 305/508/6 307/510/6 308/511/6 306/509/6
+f 301/504/4 305/508/4 306/509/4 302/505/4
+f 308/511/6 316/519/6 315/518/6 306/509/6
+f 303/506/5 309/512/5 311/514/5 307/510/5
+f 310/513/3 312/515/3 311/514/3 309/512/3
+f 307/510/6 311/514/6 312/515/6 308/511/6
+f 304/507/2 310/513/2 309/512/2 303/506/2
+f 308/511/1 312/515/1 310/513/1 304/507/1
+f 313/516/1 315/518/1 316/519/1 314/517/1
+f 302/505/2 313/516/2 314/517/2 304/507/2
+f 306/509/4 315/518/4 313/516/4 302/505/4
+f 304/507/3 314/517/3 316/519/3 308/511/3
+f 318/521/1 320/523/1 319/522/1 317/520/1
+f 298/501/3 319/522/3 320/523/3 300/503/3
+f 294/497/2 317/520/2 319/522/2 298/501/2
+f 296/499/4 318/521/4 317/520/4 294/497/4
+f 322/526/1 324/529/1 323/527/1 321/524/1
+f 290/491/6 323/527/6 324/529/6 292/495/6
+f 288/489/2 322/526/2 321/524/2 286/485/2
+f 286/485/3 321/524/3 323/527/3 290/491/3
+f 326/531/1 328/535/1 327/533/1 325/530/1
+f 282/479/2 328/536/2 326/532/2 278/474/2
+f 280/476/6 325/530/6 327/533/6 284/482/6
+f 284/483/4 327/534/4 328/536/4 282/479/4
diff --git a/java/data/innerCross.obj b/java/data/innerCross.obj
new file mode 100644
index 000000000..bd58ddae2
--- /dev/null
+++ b/java/data/innerCross.obj
@@ -0,0 +1,491 @@
+# Blender 3.4.1
+# www.blender.org
+mtllib innerCross.mtl
+o Cube
+v -30.092701 -21.395905 -191.370544
+v -30.092701 -21.395897 -191.370544
+v -20.051289 -21.395905 -191.370544
+v -20.051289 -21.395897 -191.370544
+v -30.092701 -21.395906 -180.065186
+v -30.092701 -21.395899 -180.065186
+v -20.051289 -21.395906 -180.065186
+v -20.051289 -21.395899 -180.065186
+v -30.092701 -31.595104 -191.370544
+v -20.051289 -31.595104 -191.370544
+v -20.051289 -31.595104 -180.065186
+v -30.092701 -31.595104 -180.065186
+v -20.051289 -21.395897 -191.370544
+v -20.051289 -21.395899 -180.065186
+v -20.051289 -31.595104 -191.370544
+v -20.051289 -31.595104 -180.065186
+v 29.746517 -21.395897 -191.370544
+v 29.746517 -21.395899 -180.065186
+v 29.746517 -31.595104 -191.370544
+v 29.746517 -31.595104 -180.065186
+v -20.051298 -21.395931 26.818615
+v -30.092710 -21.395931 26.818613
+v -20.051298 -31.595139 26.818613
+v -30.092710 -31.595139 26.818611
+v -20.051298 -21.395931 26.818615
+v -20.051298 -31.595139 26.818613
+v 29.746508 -21.395931 26.818617
+v 29.746508 -31.595139 26.818615
+v -20.051300 -21.395939 73.920013
+v -30.092712 -21.395939 73.920013
+v -20.051300 -31.595146 73.920006
+v -30.092712 -31.595146 73.920006
+v -20.051300 -21.395939 73.920013
+v -20.051300 -31.595146 73.920006
+v 29.746506 -21.395939 73.920013
+v 29.746506 -31.595146 73.920006
+v -20.051304 -21.395956 174.644531
+v -30.092716 -21.395956 174.644531
+v -20.051304 -31.595161 174.644531
+v -30.092716 -31.595161 174.644531
+v -20.051304 -21.395956 174.644531
+v -20.051304 -31.595161 174.644531
+v 29.746502 -21.395956 174.644531
+v 29.746502 -31.595161 174.644531
+v -99.604095 -31.595139 26.818609
+v -99.604095 -21.395931 26.818611
+v -99.604095 -31.595146 73.919998
+v -99.604095 -21.395939 73.920006
+v -30.092709 -31.595135 9.322457
+v -30.092709 -21.395929 9.322459
+v -99.604095 -31.595135 9.322454
+v -99.604095 -21.395929 9.322456
+v 100.490204 -21.395931 26.818619
+v 100.490204 -31.595139 26.818617
+v 100.490204 -21.395939 73.920021
+v 100.490204 -31.595146 73.920013
+v 29.746510 -21.395929 8.075056
+v 29.746510 -31.595135 8.075054
+v 100.490204 -21.395929 8.075058
+v 100.490204 -31.595135 8.075057
+v -20.051289 34.111061 -191.370544
+v -30.092701 34.111061 -191.370544
+v -20.051289 34.111061 -180.065186
+v -30.092701 34.111061 -180.065186
+v -20.051289 34.111069 -180.065186
+v -30.092701 34.111069 -180.065186
+v -20.051289 34.111069 -191.370544
+v -20.051289 34.111069 -180.065186
+v 29.746517 34.111069 -191.370544
+v 29.746517 34.111069 -180.065186
+v -20.051298 34.111034 26.818624
+v -30.092710 34.111034 26.818623
+v -20.051298 34.111034 26.818624
+v 29.746508 34.111034 26.818626
+v -20.051300 34.111027 73.920021
+v -30.092712 34.111027 73.920021
+v -20.051300 34.111027 73.920021
+v 29.746506 34.111027 73.920021
+v -20.051304 34.111012 174.644531
+v -30.092716 34.111012 174.644531
+v -20.051304 34.111012 174.644531
+v 29.746502 34.111012 174.644531
+v -99.604095 34.111034 26.818621
+v -99.604095 34.111027 73.920013
+v -30.092709 34.111038 9.322469
+v -99.604095 34.111038 9.322466
+v 100.490204 34.111027 73.920029
+v 100.490204 34.111034 26.818628
+v 100.490204 34.111038 8.075068
+v 29.746510 34.111038 8.075065
+v -20.051287 -21.395901 -204.185898
+v -30.092699 -21.395901 -204.185898
+v -20.051287 -21.395893 -204.185898
+v 29.746519 -21.395893 -204.185898
+v -20.051287 34.111065 -204.185898
+v -30.092699 34.111065 -204.185898
+v -20.051287 34.111073 -204.185898
+v 29.746519 34.111073 -204.185898
+v 40.017986 -21.395897 -191.370544
+v 40.017986 -21.395899 -180.065186
+v 40.017979 -21.395931 26.818617
+v 40.017986 34.111069 -191.370544
+v 40.017986 34.111069 -180.065186
+v 40.017979 34.111034 26.818626
+v 29.746510 34.111038 -1.041482
+v 29.746510 -21.395927 -1.041491
+v 100.490204 -21.395927 -1.041488
+v 100.490204 34.111038 -1.041479
+v 109.830750 -21.395929 8.075059
+v 109.830750 34.111038 8.075068
+v 109.830750 -21.395939 73.920021
+v 109.830750 -21.395931 26.818621
+v 109.830750 34.111027 73.920029
+v 109.830750 34.111034 26.818630
+v 100.490204 -21.395941 83.622658
+v 29.746506 -21.395941 83.622650
+v 100.490204 34.111023 83.622665
+v 29.746506 34.111023 83.622658
+v 39.820686 -21.395956 174.644531
+v 39.820690 -21.395939 73.920013
+v 39.820686 34.111012 174.644531
+v 39.820690 34.111027 73.920021
+v -20.051304 34.111008 182.577667
+v -20.051304 -21.395958 182.577667
+v -20.051304 -21.395958 182.577667
+v -30.092716 -21.395958 182.577667
+v 29.746502 -21.395958 182.577667
+v -20.051304 34.111008 182.577667
+v -30.092716 34.111008 182.577667
+v 29.746502 34.111008 182.577667
+v -39.945244 -21.395956 174.644531
+v -39.945240 -21.395939 73.920013
+v -39.945244 34.111012 174.644531
+v -39.945240 34.111027 73.920021
+v -99.604095 -21.395941 83.312431
+v -30.092712 -21.395941 83.312439
+v -99.604095 34.111023 83.312439
+v -30.092712 34.111023 83.312447
+v -109.816071 -21.395929 9.322455
+v -109.816071 34.111038 9.322465
+v -109.816071 -21.395931 26.818611
+v -109.816071 -21.395939 73.920006
+v -109.816071 34.111034 26.818621
+v -109.816071 34.111027 73.920013
+v -99.604095 -21.395927 -0.882932
+v -99.604095 34.111038 -0.882923
+v -30.092709 34.111038 -0.882920
+v -30.092709 -21.395927 -0.882929
+v -39.906361 -21.395905 -191.370544
+v -39.906361 -21.395906 -180.065186
+v -39.906368 -21.395931 26.818613
+v -39.906361 -21.395899 -180.065186
+v -39.906368 34.111034 26.818623
+v -39.906361 34.111061 -191.370544
+v -39.906361 34.111061 -180.065186
+v -39.906361 34.111069 -180.065186
+vn -0.0000 -0.0000 -1.0000
+vn 1.0000 -0.0000 -0.0000
+vn -0.0000 -0.0000 1.0000
+vn -1.0000 -0.0000 -0.0000
+vn -0.0000 1.0000 -0.0000
+vn -0.0000 -1.0000 -0.0000
+vt 0.375000 0.000000
+vt 0.375000 1.000000
+vt 0.625000 0.000000
+vt 0.625000 1.000000
+vt 0.375000 0.250000
+vt 0.625000 0.250000
+vt 0.375000 0.750000
+vt 0.625000 0.750000
+vt 0.375000 0.500000
+vt 0.625000 0.500000
+vt 0.875000 0.750000
+vt 0.625000 0.000000
+vt 0.625000 1.000000
+vt 0.625000 0.250000
+vt 0.875000 0.500000
+vt 0.625000 0.500000
+vt 0.625000 0.750000
+vt 0.625000 0.250000
+vt 0.625000 0.500000
+vt 0.625000 0.250000
+vt 0.875000 0.500000
+vt 0.625000 0.500000
+vt 0.625000 0.250000
+vt 0.625000 0.500000
+vt 0.625000 0.250000
+vt 0.875000 0.500000
+vt 0.625000 0.500000
+vt 0.625000 0.500000
+vt 0.625000 0.750000
+vt 0.625000 0.500000
+vt 0.625000 0.750000
+vt 0.625000 0.500000
+vt 0.625000 0.500000
+vt 0.625000 0.500000
+vt 0.625000 0.500000
+vt 0.625000 0.500000
+vt 0.625000 0.750000
+vt 0.625000 0.500000
+vt 0.625000 0.750000
+vt 0.625000 0.500000
+vt 0.625000 0.500000
+vt 0.625000 0.500000
+vt 0.625000 0.500000
+vt 0.625000 0.500000
+vt 0.625000 0.750000
+vt 0.625000 0.500000
+vt 0.625000 0.750000
+vt 0.625000 0.500000
+vt 0.625000 0.500000
+vt 0.625000 0.500000
+vt 0.625000 0.500000
+vt 0.625000 0.750000
+vt 0.625000 0.750000
+vt 0.625000 0.750000
+vt 0.625000 0.750000
+vt 0.625000 0.750000
+vt 0.625000 0.750000
+vt 0.625000 0.750000
+vt 0.625000 0.750000
+vt 0.625000 0.500000
+vt 0.625000 0.500000
+vt 0.625000 0.500000
+vt 0.625000 0.500000
+vt 0.625000 0.500000
+vt 0.625000 0.500000
+vt 0.625000 0.500000
+vt 0.625000 0.500000
+vt 0.125000 0.500000
+vt 0.375000 0.250000
+vt 0.125000 0.750000
+vt 0.375000 1.000000
+vt 0.375000 0.500000
+vt 0.375000 0.750000
+vt 0.625000 0.500000
+vt 0.625000 0.750000
+vt 0.625000 0.250000
+vt 0.625000 0.500000
+vt 0.625000 0.250000
+vt 0.625000 0.500000
+vt 0.625000 0.500000
+vt 0.625000 0.750000
+vt 0.625000 0.500000
+vt 0.625000 0.500000
+vt 0.625000 0.500000
+vt 0.625000 0.750000
+vt 0.625000 0.500000
+vt 0.625000 0.500000
+vt 0.625000 0.500000
+vt 0.625000 0.750000
+vt 0.625000 0.500000
+vt 0.625000 0.500000
+vt 0.625000 0.750000
+vt 0.625000 0.750000
+vt 0.625000 0.750000
+vt 0.625000 0.750000
+vt 0.625000 0.500000
+vt 0.625000 0.500000
+vt 0.625000 0.500000
+vt 0.625000 0.500000
+vt 0.375000 0.250000
+vt 0.375000 0.000000
+vt 0.375000 1.000000
+vt 0.625000 0.250000
+vt 0.625000 0.250000
+vt 0.125000 0.500000
+vt 0.375000 0.250000
+vt 0.125000 0.750000
+vt 0.375000 0.000000
+vt 0.375000 1.000000
+vt 0.625000 0.250000
+vt 0.625000 0.250000
+vt 0.625000 0.250000
+vt 0.625000 0.500000
+vt 0.625000 0.500000
+vt 0.625000 0.250000
+vt 0.625000 0.500000
+vt 0.625000 0.500000
+vt 0.625000 0.500000
+vt 0.625000 0.500000
+vt 0.625000 0.500000
+vt 0.625000 0.500000
+vt 0.625000 0.500000
+vt 0.625000 0.500000
+vt 0.625000 0.500000
+vt 0.625000 0.500000
+vt 0.625000 0.500000
+vt 0.625000 0.500000
+vt 0.625000 0.500000
+vt 0.625000 0.500000
+vt 0.625000 0.500000
+vt 0.625000 0.500000
+vt 0.625000 0.500000
+vt 0.625000 0.500000
+vt 0.625000 0.500000
+vt 0.625000 0.500000
+vt 0.625000 0.500000
+vt 0.625000 0.500000
+vt 0.625000 0.500000
+vt 0.625000 0.750000
+vt 0.625000 0.500000
+vt 0.625000 0.500000
+vt 0.625000 0.750000
+vt 0.625000 0.500000
+vt 0.625000 0.750000
+vt 0.625000 0.750000
+vt 0.625000 0.750000
+vt 0.625000 0.750000
+vt 0.625000 0.750000
+vt 0.625000 0.750000
+vt 0.625000 0.750000
+vt 0.625000 0.750000
+vt 0.625000 0.750000
+vt 0.625000 0.750000
+vt 0.625000 0.750000
+vt 0.625000 0.750000
+vt 0.625000 0.750000
+vt 0.625000 0.750000
+vt 0.625000 0.750000
+vt 0.625000 0.750000
+vt 0.625000 0.750000
+vt 0.625000 0.750000
+vt 0.375000 1.000000
+vt 0.375000 0.750000
+vt 0.625000 0.750000
+vt 0.625000 0.750000
+vt 0.625000 0.750000
+vt 0.125000 0.750000
+vt 0.375000 1.000000
+vt 0.375000 0.750000
+vt 0.625000 0.750000
+s 0
+f 1/1/1 2/3/1 4/6/1 3/5/1
+f 3/5/2 4/6/2 8/10/2 7/9/2
+f 7/9/3 8/10/3 6/8/3 5/7/3
+f 5/7/4 6/8/4 2/4/4 1/2/4
+f 5/7/5 1/2/5 149/162/5 150/163/5
+f 14/19/2 13/18/2 67/76/2 68/77/2
+f 11/16/5 10/15/5 9/11/5 12/17/5
+f 4/6/3 2/3/3 9/12/3 10/14/3
+f 2/4/2 6/8/2 12/17/2 9/13/2
+f 4/6/5 10/14/5 15/20/5 13/18/5
+f 18/24/4 20/27/4 28/35/4 27/34/4
+f 10/15/5 11/16/5 16/22/5 15/21/5
+f 8/10/5 4/6/5 13/18/5 14/19/5
+f 11/16/5 8/10/5 14/19/5 16/22/5
+f 18/24/4 17/23/4 19/25/4 20/27/4
+f 8/10/4 21/28/4 71/80/4 65/74/4
+f 13/18/3 15/20/3 19/25/3 17/23/3
+f 15/21/5 16/22/5 20/27/5 19/26/5
+f 32/39/5 24/31/5 45/52/5 47/54/5
+f 28/35/5 36/43/5 56/63/5 54/61/5
+f 12/17/2 6/8/2 22/29/2 24/31/2
+f 20/27/5 16/22/5 26/33/5 28/35/5
+f 16/22/2 14/19/2 25/32/2 26/33/2
+f 8/10/4 11/16/4 23/30/4 21/28/4
+f 11/16/5 12/17/5 24/31/5 23/30/5
+f 53/60/5 55/62/5 111/124/5 112/125/5
+f 36/43/5 34/41/5 42/49/5 44/51/5
+f 46/53/5 52/59/5 139/152/5 141/154/5
+f 23/30/5 24/31/5 32/39/5 31/38/5
+f 74/83/6 70/79/6 103/116/6 104/117/6
+f 26/33/2 25/32/2 33/40/2 34/41/2
+f 21/28/4 23/30/4 31/38/4 29/36/4
+f 27/34/2 57/64/2 90/99/2 74/83/2
+f 28/35/5 26/33/5 34/41/5 36/43/5
+f 38/45/1 37/44/1 39/46/1 40/47/1
+f 42/49/1 41/48/1 43/50/1 44/51/1
+f 35/42/4 36/43/4 44/51/4 43/50/4
+f 32/39/2 30/37/2 38/45/2 40/47/2
+f 31/38/5 32/39/5 40/47/5 39/46/5
+f 52/59/3 86/95/3 140/153/3 139/152/3
+f 34/41/2 33/40/2 41/48/2 42/49/2
+f 29/36/4 31/38/4 39/46/4 37/44/4
+f 45/52/2 46/53/2 48/55/2 47/54/2
+f 24/31/4 22/29/4 50/57/4 49/56/4
+f 30/37/1 32/39/1 47/54/1 48/55/1
+f 3/5/4 7/9/4 63/72/4 61/69/4
+f 49/56/3 50/57/3 52/59/3 51/58/3
+f 90/99/2 57/64/2 106/119/2 105/118/2
+f 45/52/5 24/31/5 49/56/5 51/58/5
+f 46/53/2 45/52/2 51/58/2 52/59/2
+f 53/60/4 54/61/4 56/63/4 55/62/4
+f 41/48/2 33/40/2 77/86/2 81/90/2
+f 50/57/4 22/29/4 72/81/4 85/94/4
+f 36/43/1 35/42/1 55/62/1 56/63/1
+f 57/64/3 58/65/3 60/67/3 59/66/3
+f 54/61/4 53/60/4 59/66/4 60/67/4
+f 27/34/2 28/35/2 58/65/2 57/64/2
+f 28/35/5 54/61/5 60/67/5 58/65/5
+f 61/68/6 63/72/6 64/73/6 62/70/6
+f 66/75/6 65/74/6 71/80/6 72/81/6
+f 68/77/6 67/76/6 69/78/6 70/79/6
+f 68/77/6 70/79/6 74/83/6 73/82/6
+f 76/85/6 75/84/6 79/88/6 80/89/6
+f 73/82/6 74/83/6 78/87/6 77/86/6
+f 72/81/6 71/80/6 75/84/6 76/85/6
+f 77/86/6 78/87/6 82/91/6 81/90/6
+f 72/81/6 76/85/6 84/93/6 83/92/6
+f 72/81/6 83/92/6 86/95/6 85/94/6
+f 88/97/6 74/83/6 90/99/6 89/98/6
+f 78/87/6 74/83/6 88/97/6 87/96/6
+f 43/50/5 41/48/5 124/137/5 127/140/5
+f 7/9/1 5/7/1 64/73/1 63/72/1
+f 61/68/6 62/70/6 96/107/6 95/105/6
+f 6/8/3 8/10/3 65/74/3 66/75/3
+f 29/36/4 37/44/4 79/88/4 75/84/4
+f 87/96/6 88/97/6 114/127/6 113/126/6
+f 25/32/2 14/19/2 68/77/2 73/82/2
+f 76/85/6 80/89/6 133/146/6 134/147/6
+f 6/8/3 66/75/3 156/170/3 152/165/3
+f 48/55/2 84/93/2 137/150/2 135/148/2
+f 33/40/2 25/32/2 73/82/2 77/86/2
+f 78/87/3 35/42/3 120/133/3 122/135/3
+f 35/42/2 78/87/2 118/131/2 116/129/2
+f 21/28/4 29/36/4 75/84/4 71/80/4
+f 67/76/2 13/18/2 93/103/2 97/110/2
+f 38/45/2 80/89/2 129/142/2 126/139/2
+f 86/95/2 52/59/2 145/158/2 146/159/2
+f 17/23/5 18/24/5 100/113/5 99/112/5
+f 93/103/3 94/104/3 98/111/3 97/110/3
+f 92/101/3 91/100/3 95/106/3 96/108/3
+f 17/23/4 69/78/4 98/111/4 94/104/4
+f 1/1/5 3/5/5 91/100/5 92/101/5
+f 62/71/2 1/2/2 92/102/2 96/109/2
+f 69/78/6 67/76/6 97/110/6 98/111/6
+f 3/5/4 61/69/4 95/106/4 91/100/4
+f 13/18/5 17/23/5 94/104/5 93/103/5
+f 100/113/4 101/114/4 104/117/4 103/116/4
+f 99/112/4 100/113/4 103/116/4 102/115/4
+f 69/78/3 17/23/3 99/112/3 102/115/3
+f 27/34/1 74/83/1 104/117/1 101/114/1
+f 18/24/5 27/34/5 101/114/5 100/113/5
+f 70/79/6 69/78/6 102/115/6 103/116/6
+f 106/119/3 107/120/3 108/121/3 105/118/3
+f 89/98/6 90/99/6 105/118/6 108/121/6
+f 59/66/4 89/98/4 108/121/4 107/120/4
+f 57/64/5 59/66/5 107/120/5 106/119/5
+f 109/122/4 112/125/4 114/127/4 110/123/4
+f 112/125/4 111/124/4 113/126/4 114/127/4
+f 88/97/6 89/98/6 110/123/6 114/127/6
+f 55/62/1 87/96/1 113/126/1 111/124/1
+f 89/98/3 59/66/3 109/122/3 110/123/3
+f 59/66/5 53/60/5 112/125/5 109/122/5
+f 115/128/1 116/129/1 118/131/1 117/130/1
+f 55/62/5 35/42/5 116/129/5 115/128/5
+f 78/87/6 87/96/6 117/130/6 118/131/6
+f 87/96/4 55/62/4 115/128/4 117/130/4
+f 120/133/4 119/132/4 121/134/4 122/135/4
+f 43/50/1 82/91/1 121/134/1 119/132/1
+f 82/91/6 78/87/6 122/135/6 121/134/6
+f 35/42/5 43/50/5 119/132/5 120/133/5
+f 127/140/1 124/137/1 123/136/1 130/143/1
+f 125/138/1 126/139/1 129/142/1 128/141/1
+f 81/90/6 82/91/6 130/143/6 123/136/6
+f 41/48/2 81/90/2 123/136/2 124/137/2
+f 37/44/5 38/45/5 126/139/5 125/138/5
+f 82/91/4 43/50/4 127/140/4 130/143/4
+f 80/89/6 79/88/6 128/141/6 129/142/6
+f 79/88/4 37/44/4 125/138/4 128/141/4
+f 131/144/2 132/145/2 134/147/2 133/146/2
+f 80/89/1 38/45/1 131/144/1 133/146/1
+f 38/45/5 30/37/5 132/145/5 131/144/5
+f 30/37/3 76/85/3 134/147/3 132/145/3
+f 136/149/1 135/148/1 137/150/1 138/151/1
+f 84/93/6 76/85/6 138/151/6 137/150/6
+f 76/85/4 30/37/4 136/149/4 138/151/4
+f 30/37/5 48/55/5 135/148/5 136/149/5
+f 142/155/2 141/154/2 143/156/2 144/157/2
+f 141/154/2 139/152/2 140/153/2 143/156/2
+f 84/93/1 48/55/1 142/155/1 144/157/1
+f 83/92/6 84/93/6 144/157/6 143/156/6
+f 48/55/5 46/53/5 141/154/5 142/155/5
+f 86/95/6 83/92/6 143/156/6 140/153/6
+f 145/158/3 148/161/3 147/160/3 146/159/3
+f 50/57/4 85/94/4 147/160/4 148/161/4
+f 52/59/5 50/57/5 148/161/5 145/158/5
+f 85/94/6 86/95/6 146/159/6 147/160/6
+f 151/164/2 152/165/2 156/170/2 153/166/2
+f 150/163/2 149/162/2 154/168/2 155/169/2
+f 62/70/6 64/73/6 155/169/6 154/167/6
+f 66/75/6 72/81/6 153/166/6 156/170/6
+f 1/2/3 62/71/3 154/168/3 149/162/3
+f 72/81/1 22/29/1 151/164/1 153/166/1
+f 22/29/5 6/8/5 152/165/5 151/164/5
+f 64/73/1 5/7/1 150/163/1 155/169/1
diff --git a/java/data/justice.png b/java/data/justice.png
new file mode 100644
index 000000000..38452ca52
Binary files /dev/null and b/java/data/justice.png differ
diff --git a/java/data/segments/End.mp3 b/java/data/segments/End.mp3
new file mode 100644
index 000000000..dc4a0de89
Binary files /dev/null and b/java/data/segments/End.mp3 differ
diff --git a/java/data/segments/First-Background-zaps.mp3 b/java/data/segments/First-Background-zaps.mp3
new file mode 100644
index 000000000..478552c2d
Binary files /dev/null and b/java/data/segments/First-Background-zaps.mp3 differ
diff --git a/java/data/segments/First-drop.mp3 b/java/data/segments/First-drop.mp3
new file mode 100644
index 000000000..ddaa65326
Binary files /dev/null and b/java/data/segments/First-drop.mp3 differ
diff --git a/java/data/segments/First-dubstep-break.mp3 b/java/data/segments/First-dubstep-break.mp3
new file mode 100644
index 000000000..67bc6f619
Binary files /dev/null and b/java/data/segments/First-dubstep-break.mp3 differ
diff --git a/java/data/segments/Intro.mp3 b/java/data/segments/Intro.mp3
new file mode 100644
index 000000000..1d9c54a15
Binary files /dev/null and b/java/data/segments/Intro.mp3 differ
diff --git a/java/data/segments/Piano-buildup.mp3 b/java/data/segments/Piano-buildup.mp3
new file mode 100644
index 000000000..8d1b5aee0
Binary files /dev/null and b/java/data/segments/Piano-buildup.mp3 differ
diff --git a/java/data/segments/Second-background-zaps.mp3 b/java/data/segments/Second-background-zaps.mp3
new file mode 100644
index 000000000..6a49e2fce
Binary files /dev/null and b/java/data/segments/Second-background-zaps.mp3 differ
diff --git a/java/data/segments/Second-drop.mp3 b/java/data/segments/Second-drop.mp3
new file mode 100644
index 000000000..ab569205f
Binary files /dev/null and b/java/data/segments/Second-drop.mp3 differ
diff --git a/java/data/segments/Third-background-zaps.mp3 b/java/data/segments/Third-background-zaps.mp3
new file mode 100644
index 000000000..56b61c39a
Binary files /dev/null and b/java/data/segments/Third-background-zaps.mp3 differ
diff --git a/java/data/segments/zaps-and-whine.mp3 b/java/data/segments/zaps-and-whine.mp3
new file mode 100644
index 000000000..3af3d78df
Binary files /dev/null and b/java/data/segments/zaps-and-whine.mp3 differ
diff --git a/java/lib/OBJLoader.jar b/java/lib/OBJLoader.jar
new file mode 100644
index 000000000..fd912e0a9
Binary files /dev/null and b/java/lib/OBJLoader.jar differ
diff --git a/java/src/c123456/BryansVisual.java b/java/src/c123456/BryansVisual.java
deleted file mode 100644
index e69de29bb..000000000
diff --git a/java/src/c21430484/AudioBandsVisual.java b/java/src/c21430484/AudioBandsVisual.java
new file mode 100644
index 000000000..59305930f
--- /dev/null
+++ b/java/src/c21430484/AudioBandsVisual.java
@@ -0,0 +1,39 @@
+package c21430484;
+
+// This is an example of a visual that uses the audio bands
+public class AudioBandsVisual
+{
+ BensVisual mv;
+
+ public AudioBandsVisual(BensVisual mv)
+ {
+ this.mv = mv;
+ }
+
+ public void render(int phase)
+ {
+ if(phase == 1)
+ {
+ float gap = mv.width / (float) mv.getBands().length;
+ float testGap = mv.height / (float) mv.getBands().length;
+
+ // float brightness = 60 / (float) mv.getBands().length;
+
+ mv.noStroke();
+ for(int i = 0 ; i < mv.getBands().length ; i ++)
+ {
+ mv.fill(208, 152, 3, 40 + 100 - (i * 10));
+
+ // mv.rect(i * gap, mv.height, gap,-mv.getSmoothedBands()[i] * 0.2f);
+ // mv.rect(i * gap, 0, gap, mv.getSmoothedBands()[i] * 0.2f);
+
+ mv.rect(0, i * testGap, +mv.getSmoothedBands()[i] * 0.2f, testGap);
+ mv.rect(mv.width, i * testGap, -mv.getSmoothedBands()[i] * 0.2f, testGap);
+ }
+ }
+ else if(phase == 2)
+ {
+
+ }
+ }
+}
\ No newline at end of file
diff --git a/java/src/c21430484/BensVisual.java b/java/src/c21430484/BensVisual.java
new file mode 100644
index 000000000..c3784bf51
--- /dev/null
+++ b/java/src/c21430484/BensVisual.java
@@ -0,0 +1,156 @@
+package c21430484;
+
+import ddf.minim.AudioBuffer;
+import ie.tudublin.*;
+import processing.core.PImage;
+import processing.core.PShape;
+
+import example.*;
+
+
+
+public class BensVisual extends Visual
+{
+ WaveForm wf;
+ CrossVisual cv;
+ AudioBandsVisual abv;
+ TrumpetBandVisual tbv;
+ CircularWaveVisual cbv;
+
+ PImage justice;
+ AudioBuffer ab;
+
+ long startTime;
+ long currentTime;
+
+ public void settings()
+ {
+ size(1024, 700, P3D);
+
+ // Use this to make fullscreen
+ //fullScreen();
+
+ // Use this to make fullscreen and use P3D for 3D graphics
+ //fullScreen(P3D, SPAN);
+ }
+
+ public void setup()
+ {
+ startMinim();
+ // colorMode(HSB);
+
+ // Call loadAudio to load an audio file to process
+ loadAudio("Genesis.mp3");
+
+
+ // Call this instead to read audio from the microphone
+ // startListening();
+
+ wf = new WaveForm(this);
+ abv = new AudioBandsVisual(this);
+ tbv = new TrumpetBandVisual(this);
+ cv = new CrossVisual(this);
+ cbv = new CircularWaveVisual(this);
+
+ justice = loadImage("justice.png");
+
+ startTime = -1;
+
+ background(0);
+ }
+
+ public void keyPressed()
+ {
+ if (key == ' ')
+ {
+ getAudioPlayer().cue(0);
+ getAudioPlayer().play();
+ startTime = System.currentTimeMillis();
+ }
+ }
+
+ boolean drawBackground = true;
+
+ public void draw()
+ {
+ currentTime = System.currentTimeMillis();
+
+ if(startTime != -1)
+ {
+ if((timeElapsed() > 124060 && timeElapsed() < 137500) || (timeElapsed() > 181500 && timeElapsed() < 186500))
+ drawBackground = false;
+ else
+ drawBackground = true;
+ }
+
+ if(drawBackground)
+ background(0);
+
+
+ try
+ {
+ // Call this if you want to use FFT data
+ calculateFFT();
+ }
+ catch(VisualException e)
+ {
+ e.printStackTrace();
+ }
+ // Call this is you want to use frequency bands
+ calculateFrequencyBands();
+
+ // Call this is you want to get the average amplitude
+ calculateAverageAmplitude();
+
+
+
+ if(startTime != -1)
+ {
+ if(timeElapsed() > 137500 && timeElapsed() < 186500)
+ renderPhase2();
+ else
+ renderPhase1();
+ }
+ else
+ renderPhase1();
+
+ // renderPhase2();
+ }
+
+
+
+ public void renderPhase1()
+ {
+ translate(-width/2, -height/2, 0);
+
+
+ if(timeElapsed() < 187000)
+ tbv.render(1);
+ else
+ tbv.render(2);
+
+ wf.render();
+
+ cv.render(1);
+ }
+
+ public void renderPhase2()
+ {
+ translate(-width/2, -height/2, 0);
+ cbv.render();
+ popMatrix();
+
+ abv.render(1);
+
+
+ cv.render(2);
+ }
+
+ public long timeElapsed()
+ {
+ if(startTime == -1)
+ return 0;
+
+ return currentTime - startTime;
+ }
+}
\ No newline at end of file
diff --git a/java/src/c21430484/CircularWaveVisual.java b/java/src/c21430484/CircularWaveVisual.java
new file mode 100644
index 000000000..3678c428e
--- /dev/null
+++ b/java/src/c21430484/CircularWaveVisual.java
@@ -0,0 +1,32 @@
+package c21430484;
+
+import processing.core.*;
+
+public class CircularWaveVisual
+{
+ BensVisual mv;
+ float cy = 0;
+
+ public CircularWaveVisual(BensVisual mv)
+ {
+ this.mv = mv;
+ this.mv = mv;
+ cy = this.mv.height / 2;
+ }
+
+ public void render()
+ {
+ mv.stroke(208, 152, 3);
+
+ mv.pushMatrix();
+ mv.translate(mv.width/2, mv.height/2);
+ mv.rotate(PApplet.radians(mv.frameCount % 360 * 2));
+
+ for(int j = 0; j < 360; j++)
+ {
+ mv.line(PApplet.cos(j)*245, PApplet.sin(j)*245, PApplet.cos(j)*PApplet.abs(mv.getAudioBuffer().get(j))*200 + PApplet.cos(j)*245, PApplet.sin(j)*PApplet.abs(mv.getAudioBuffer().get(j))*200 + PApplet.sin(j)*245);
+ }
+
+
+ }
+}
diff --git a/java/src/c21430484/CrossVisual.java b/java/src/c21430484/CrossVisual.java
new file mode 100644
index 000000000..6b0eea3cc
--- /dev/null
+++ b/java/src/c21430484/CrossVisual.java
@@ -0,0 +1,148 @@
+package c21430484;
+
+import processing.core.PApplet;
+import processing.core.PShape;
+import java.util.*;
+
+public class CrossVisual
+{
+ BensVisual mv;
+
+ PShape cross;
+ PShape innerCross;
+
+ float objScale;
+ float scaler;
+ float abScale;
+
+ long currentTime;
+
+ public CrossVisual(BensVisual mv)
+ {
+ this.mv = mv;
+ innerCross = mv.loadShape("innerCross.obj");
+ cross = mv.loadShape("cross.obj");
+ // cross.translate(mv.width / 2, mv.height / 2);
+ objScale = 0.8f;
+
+ cross.rotateX(+260);
+ cross.scale(objScale);
+
+ innerCross.rotateX(+260);
+ innerCross.scale(objScale);
+ }
+
+
+ public void changeScale()
+ {
+ float scaler = 0.8f;
+
+ abScale = (mv.getSmoothedBands()[0] * 0.8f);
+ abScale = PApplet.map(abScale, 0f, 40f, 0.8f, 1.1f);
+ scaler = PApplet.lerp(scaler, abScale, 0.85f);
+
+ if(objScale > scaler)
+ {
+ while(objScale > scaler)
+ {
+ objScale = objScale * 0.999f;
+ cross.scale(0.999f);
+ innerCross.scale(0.999f);
+ }
+ }
+ else
+ {
+ while(objScale < scaler)
+ {
+ objScale = objScale * 1.001f;
+ cross.scale(1.001f);
+ innerCross.scale(1.001f);
+ }
+ }
+ }
+
+
+ public void render(int phase)
+ {
+ cross.setFill(mv.color(208, 152, 3));
+ mv.camera(0f, 0f, mv.height * .86602f, 0f, 0f, 0f, 0f, 1f, 0f);
+ mv.lights();
+ mv.shape(cross);
+
+ innerCross.setFill(mv.color(0));
+ mv.shape(innerCross);
+
+ // currentTime = System.currentTimeMillis();
+ // cross.rotateX(0.005f);
+
+ if(phase == 1)
+ renderPhase1();
+ else if(phase == 2)
+ renderPhase2();
+ }
+
+ public void renderPhase1()
+ {
+ if(mv.timeElapsed() > 5000)
+ {
+ cross.rotateY(0.005f);
+ cross.rotateZ(0.005f);
+
+ innerCross.rotateY(0.005f);
+ innerCross.rotateZ(0.005f);
+ }
+
+ if(mv.timeElapsed() > 38700)
+ {
+ changeScale();
+
+ cross.rotateX(-0.0005f);
+ innerCross.rotateX(-0.0005f);
+ }
+
+ if(mv.timeElapsed() > 125000 && mv.timeElapsed() < 137500)
+ {
+ if(mv.timeElapsed() < 131250)
+ {
+ cross.rotateY(0.02f);
+ cross.rotateZ(0.02f);
+
+ innerCross.rotateY(0.02f);
+ innerCross.rotateZ(0.02f);
+
+ cross.rotateX(-0.02f);
+ innerCross.rotateX(-0.02f);
+ }
+ else
+ {
+ cross.rotateY(-0.02f);
+ cross.rotateZ(-0.02f);
+
+ innerCross.rotateY(-0.02f);
+ innerCross.rotateZ(-0.02f);
+
+ cross.rotateX(0.07f);
+ innerCross.rotateX(0.07f);
+ }
+ }
+ }
+
+ public void renderPhase2()
+ {
+ cross.rotateZ(0.01f);
+ innerCross.rotateZ(0.01f);
+
+ if(mv.timeElapsed() > 170000 && mv.timeElapsed() < 187000)
+ {
+ cross.rotateY(0.035f);
+ innerCross.rotateY(0.035f);
+
+ cross.rotateZ(0.045f);
+ innerCross.rotateZ(0.045f);
+
+ cross.rotateX(-0.02f);
+ innerCross.rotateX(-0.02f);
+ }
+ }
+}
+
diff --git a/java/src/c21430484/TrumpetBandVisual.java b/java/src/c21430484/TrumpetBandVisual.java
new file mode 100644
index 000000000..d4e9c288e
--- /dev/null
+++ b/java/src/c21430484/TrumpetBandVisual.java
@@ -0,0 +1,98 @@
+package c21430484;
+
+import processing.core.*;
+
+// This is an example of a visual that uses the audio bands
+public class TrumpetBandVisual
+{
+ BensVisual mv;
+ int noCircles;
+ long lastIncrement = 0;
+
+ public TrumpetBandVisual(BensVisual mv)
+ {
+ this.mv = mv;
+ this.noCircles = 1;
+ this.lastIncrement = 0;
+ }
+
+ public void render(int phase)
+ {
+
+ if(mv.timeElapsed() > 235000)
+ return;
+
+ float gap = mv.width / (float) mv.getBands().length;
+
+ mv.noStroke();
+
+
+ // mv.fill(PApplet.map(6, 0, mv.getBands().length, 255, 0), 255, 255);
+ mv.fill(208, 152, 3);
+
+ mv.rect(0, mv.height, 75, -mv.getSmoothedBands()[6] * 0.75f);
+ mv.rect(mv.width - 75, mv.height, 75,-mv.getSmoothedBands()[6] * 0.75f);
+
+
+ if(phase == 2)
+ {
+ mv.translate(0, 0, -200f);
+ for(int i = 0 ; i < mv.getBands().length ; i ++)
+ {
+ mv.translate(0, 0, -90f);
+ mv.fill(69, 50, 1);
+ mv.rect(i * gap, mv.height + 165, gap,-mv.getSmoothedBands()[i] * 0.4f);
+ mv.translate(0, 0, 90f);
+
+ mv.translate(0, 0, -70f);
+ mv.fill(115, 84, 1);
+ mv.rect(i * gap, mv.height + 165, gap,-mv.getSmoothedBands()[i] * 0.3f);
+ mv.translate(0, 0, 70f);
+
+ mv.fill(163, 120, 3);
+ mv.rect(i * gap, mv.height + 125, gap,-mv.getSmoothedBands()[i] * 0.2f);
+ }
+ mv.translate(0, 0, +200f);
+ }
+
+ mv.noFill();
+ mv.stroke(208, 152, 3);
+ mv.translate(0, +30, 0);
+
+ if((mv.timeElapsed() > 63500 && mv.timeElapsed() < 71000) ||
+ (mv.timeElapsed() > 104400 && mv.timeElapsed() < 120000))
+ {
+ if(lastIncrement == 0)
+ lastIncrement = (mv.timeElapsed() + 5) / 10 * 5;
+
+
+ if(mv.currentTime - lastIncrement > 500)
+ {
+ noCircles += 2;
+ lastIncrement = mv.currentTime;
+ }
+ }
+
+ if((mv.timeElapsed() > 71000 && mv.timeElapsed() < 104400 ) ||
+ mv.timeElapsed() > 120000)
+ {
+ if(noCircles > 1)
+ {
+ if(mv.currentTime - lastIncrement > 100)
+ {
+ noCircles--;
+ lastIncrement = mv.currentTime;
+ }
+ }
+ }
+
+ mv.translate(0, 0, -175f);
+ for(int i = 0; i < noCircles; i++)
+ {
+ mv.circle(mv.width / 2, mv.height / 2, 380 + (mv.getSmoothedBands()[6] * (0.45f - (0.07f * i))));
+ }
+
+ mv.image(mv.justice, (mv.width/2) - 125, -100);
+ mv.translate(0, -30, 175);
+ }
+}
\ No newline at end of file
diff --git a/java/src/c21430484/WaveForm.java b/java/src/c21430484/WaveForm.java
new file mode 100644
index 000000000..613a0d2e2
--- /dev/null
+++ b/java/src/c21430484/WaveForm.java
@@ -0,0 +1,33 @@
+package c21430484;
+
+import processing.core.*;
+
+// This is an example of a visual that renders the waveform
+public class WaveForm
+{
+ BensVisual mv;
+ float cy = 0;
+
+ public WaveForm(BensVisual mv)
+ {
+ this.mv = mv;
+ cy = this.mv.height / 2;
+ cy = cy + 350;
+ }
+
+ public void render()
+ {
+ // mv.colorMode(PApplet.HSB);
+ for(int i = 0 ; i < mv.getAudioBuffer().size() ; i ++)
+ {
+ mv.stroke(208, 152, 3);
+ // mv.stroke
+ // (
+ // PApplet.map(i, 0, mv.getAudioBuffer().size(), 0, 255), 255, 255
+ // );
+
+ mv.line(i, cy, i, cy + mv.getAudioBuffer().get(i) * 100);
+ }
+ }
+}
+
diff --git a/java/src/example/CubeVisual.java b/java/src/example/CubeVisual.java
index ff8e58798..85758d581 100644
--- a/java/src/example/CubeVisual.java
+++ b/java/src/example/CubeVisual.java
@@ -31,12 +31,12 @@ public void keyPressed()
public void setup()
{
colorMode(HSB);
- noCursor();
+ // noCursor();
setFrameSize(256);
startMinim();
- loadAudio("heroplanet.mp3");
+ loadAudio("Genesis.mp3");
//getAp().play();
//startListening();
@@ -54,7 +54,7 @@ public void draw()
camera(0, 0, 0, 0, 0, -1, 0, 1, 0);
translate(0, 0, -250);
- float boxSize = 50 + (getAmplitude() * 300);//map(average, 0, 1, 100, 400);
+ float boxSize = 25 + (getAmplitude() * 300);//map(average, 0, 1, 100, 400);
smoothedBoxSize = lerp(smoothedBoxSize, boxSize, 0.2f);
if (twocubes)
{
@@ -77,7 +77,7 @@ public void draw()
else
{
rotateY(angle);
- rotateX(angle);
+ rotateX(angle * 2);
//strokeWeight(1);
//sphere(smoothedBoxSize/ 2);
strokeWeight(5);
diff --git a/java/src/example/AudioBandsVisual.java b/java/src/example/ExampleAudioBandsVisual.java
similarity index 73%
rename from java/src/example/AudioBandsVisual.java
rename to java/src/example/ExampleAudioBandsVisual.java
index b6b99d6e5..3a4a45600 100644
--- a/java/src/example/AudioBandsVisual.java
+++ b/java/src/example/ExampleAudioBandsVisual.java
@@ -1,25 +1,26 @@
-package example;
-
-import processing.core.*;
-
-// This is an example of a visual that uses the audio bands
-public class AudioBandsVisual
-{
- MyVisual mv;
-
- public AudioBandsVisual(MyVisual mv)
- {
- this.mv = mv;
- }
-
- public void render()
- {
- float gap = mv.width / (float) mv.getBands().length;
- mv.noStroke();
- for(int i = 0 ; i < mv.getBands().length ; i ++)
- {
- mv.fill(PApplet.map(i, 0, mv.getBands().length, 255, 0), 255, 255);
- mv.rect(i * gap, mv.height, gap,-mv.getSmoothedBands()[i] * 0.2f);
- }
- }
+package example;
+
+import c21430484.BensVisual;
+import processing.core.*;
+
+// This is an example of a visual that uses the audio bands
+public class ExampleAudioBandsVisual
+{
+ BensVisual mv;
+
+ public ExampleAudioBandsVisual(BensVisual bensVisual)
+ {
+ this.mv = bensVisual;
+ }
+
+ public void render()
+ {
+ float gap = mv.width / (float) mv.getBands().length;
+ mv.noStroke();
+ for(int i = 0 ; i < mv.getBands().length ; i ++)
+ {
+ mv.fill(PApplet.map(i, 0, mv.getBands().length, 255, 0), 255, 255);
+ mv.rect(i * gap, mv.height, gap,-mv.getSmoothedBands()[i] * 0.2f);
+ }
+ }
}
\ No newline at end of file
diff --git a/java/src/example/RotatingAudioBands.java b/java/src/example/ExampleRotatingAudioBands.java
similarity index 92%
rename from java/src/example/RotatingAudioBands.java
rename to java/src/example/ExampleRotatingAudioBands.java
index 72fd7a223..98831017b 100644
--- a/java/src/example/RotatingAudioBands.java
+++ b/java/src/example/ExampleRotatingAudioBands.java
@@ -1,89 +1,89 @@
-package example;
-
-import ie.tudublin.Visual;
-import ie.tudublin.VisualException;
-
-public class RotatingAudioBands extends Visual {
-
-
- public void settings()
- {
- size(800, 800, P3D);
- println("CWD: " + System.getProperty("user.dir"));
- //fullScreen(P3D, SPAN);
- }
-
- public void keyPressed()
- {
- if (key == ' ')
- {
- getAudioPlayer().cue(0);
- getAudioPlayer().play();
-
- }
-
- }
-
- public void setup()
- {
- colorMode(HSB);
- noCursor();
-
- setFrameSize(256);
-
- startMinim();
- loadAudio("heroplanet.mp3");
- getAudioPlayer().play();
- //startListening();
-
- }
-
- float radius = 200;
-
- float smoothedBoxSize = 0;
-
- float rot = 0;
-
- public void draw()
- {
- calculateAverageAmplitude();
- try
- {
- calculateFFT();
- }
- catch(VisualException e)
- {
- e.printStackTrace();
- }
- calculateFrequencyBands();
- background(0);
- noFill();
- stroke(255);
- lights();
- stroke(map(getSmoothedAmplitude(), 0, 1, 0, 255), 255, 255);
- camera(0, -500, 500, 0, 0, 0, 0, 1, 0);
- //translate(0, 0, -250);
-
- rot += getAmplitude() / 8.0f;
-
- rotateY(rot);
- float[] bands = getSmoothedBands();
- for(int i = 0 ; i < bands.length ; i ++)
- {
- float theta = map(i, 0, bands.length, 0, TWO_PI);
-
- stroke(map(i, 0, bands.length, 0, 255), 255, 255);
- float x = sin(theta) * radius;
- float z = cos(theta) * radius;
- float h = bands[i];
- pushMatrix();
- translate(x, - h / 2 , z);
- rotateY(theta);
- box(50, h, 50);
- popMatrix();
- }
-
- }
- float angle = 0;
-
+package example;
+
+import ie.tudublin.Visual;
+import ie.tudublin.VisualException;
+
+public class ExampleRotatingAudioBands extends Visual {
+
+
+ public void settings()
+ {
+ size(800, 800, P3D);
+ println("CWD: " + System.getProperty("user.dir"));
+ //fullScreen(P3D, SPAN);
+ }
+
+ public void keyPressed()
+ {
+ if (key == ' ')
+ {
+ getAudioPlayer().cue(0);
+ getAudioPlayer().play();
+
+ }
+
+ }
+
+ public void setup()
+ {
+ colorMode(HSB);
+ noCursor();
+
+ setFrameSize(256);
+
+ startMinim();
+ loadAudio("heroplanet.mp3");
+ getAudioPlayer().play();
+ //startListening();
+
+ }
+
+ float radius = 200;
+
+ float smoothedBoxSize = 0;
+
+ float rot = 0;
+
+ public void draw()
+ {
+ calculateAverageAmplitude();
+ try
+ {
+ calculateFFT();
+ }
+ catch(VisualException e)
+ {
+ e.printStackTrace();
+ }
+ calculateFrequencyBands();
+ background(0);
+ noFill();
+ stroke(255);
+ lights();
+ stroke(map(getSmoothedAmplitude(), 0, 1, 0, 255), 255, 255);
+ camera(0, -500, 500, 0, 0, 0, 0, 1, 0);
+ //translate(0, 0, -250);
+
+ rot += getAmplitude() / 8.0f;
+
+ rotateY(rot);
+ float[] bands = getSmoothedBands();
+ for(int i = 0 ; i < bands.length ; i ++)
+ {
+ float theta = map(i, 0, bands.length, 0, TWO_PI);
+
+ stroke(map(i, 0, bands.length, 0, 255), 255, 255);
+ float x = sin(theta) * radius;
+ float z = cos(theta) * radius;
+ float h = bands[i];
+ pushMatrix();
+ translate(x, - h / 2 , z);
+ rotateY(theta);
+ box(50, h, 50);
+ popMatrix();
+ }
+
+ }
+ float angle = 0;
+
}
\ No newline at end of file
diff --git a/java/src/example/WaveForm.java b/java/src/example/ExampleWaveForm.java
similarity index 87%
rename from java/src/example/WaveForm.java
rename to java/src/example/ExampleWaveForm.java
index 5d38aa700..30e095571 100644
--- a/java/src/example/WaveForm.java
+++ b/java/src/example/ExampleWaveForm.java
@@ -1,31 +1,31 @@
-package example;
-
-import processing.core.*;
-
-// This is an example of a visual that renders the waveform
-public class WaveForm
-{
- MyVisual mv;
- float cy = 0;
-
- public WaveForm(MyVisual mv)
- {
- this.mv = mv;
- cy = this.mv.height / 2;
- }
-
- public void render()
- {
- mv.colorMode(PApplet.HSB);
- for(int i = 0 ; i < mv.getAudioBuffer().size() ; i ++)
- {
- mv.stroke(
- PApplet.map(i, 0, mv.getAudioBuffer().size(), 0, 255)
- , 255
- , 255
- );
-
- mv.line(i, cy, i, cy + cy * mv.getAudioBuffer().get(i));
- }
- }
+package example;
+
+import processing.core.*;
+
+// This is an example of a visual that renders the waveform
+public class ExampleWaveForm
+{
+ MyVisual mv;
+ float cy = 0;
+
+ public ExampleWaveForm(MyVisual mv)
+ {
+ this.mv = mv;
+ cy = this.mv.height / 2;
+ }
+
+ public void render()
+ {
+ mv.colorMode(PApplet.HSB);
+ for(int i = 0 ; i < mv.getAudioBuffer().size() ; i ++)
+ {
+ mv.stroke(
+ PApplet.map(i, 0, mv.getAudioBuffer().size(), 0, 255)
+ , 255
+ , 255
+ );
+
+ mv.line(i, cy, i, cy + cy * mv.getAudioBuffer().get(i));
+ }
+ }
}
\ No newline at end of file
diff --git a/java/src/example/MyVisual.java b/java/src/example/MyVisual.java
index 849e71bc2..5846ef876 100644
--- a/java/src/example/MyVisual.java
+++ b/java/src/example/MyVisual.java
@@ -4,8 +4,8 @@
public class MyVisual extends Visual
{
- WaveForm wf;
- AudioBandsVisual abv;
+ ExampleWaveForm wf;
+ ExampleAudioBandsVisual abv;
public void settings()
{
@@ -29,8 +29,8 @@ public void setup()
// Call this instead to read audio from the microphone
startListening();
- wf = new WaveForm(this);
- abv = new AudioBandsVisual(this);
+ wf = new ExampleWaveForm(this);
+ abv = new ExampleAudioBandsVisual(this);
}
public void keyPressed()
diff --git a/java/src/example/test.java b/java/src/example/test.java
new file mode 100644
index 000000000..955958732
--- /dev/null
+++ b/java/src/example/test.java
@@ -0,0 +1,229 @@
+package example;
+
+
+import ddf.minim.Minim;
+import ddf.minim.analysis.FFT;
+import ddf.minim.AudioBuffer;
+import ddf.minim.AudioInput;
+import ddf.minim.AudioPlayer;
+import ie.tudublin.Visual;
+import ie.tudublin.VisualException;
+import processing.core.PShape;
+
+
+public class test extends Visual
+{
+ Minim minim;
+ AudioInput ai;
+ AudioBuffer ab;
+ AudioBuffer abRight;
+ AudioBuffer abLeft;
+ AudioPlayer ap;
+ FFT fft;
+ PShape cube;
+
+ int frameSize = 1024;
+
+ public void settings()
+ {
+ size(512 , 512, P3D);
+ // fullScreen(P3D, SPAN);
+ }
+
+ public void setup()
+ {
+ colorMode(HSB);
+ background(0);
+
+
+ smooth();
+ minim = new Minim(this);
+ ai = minim.getLineIn(Minim.MONO, frameSize, 44100, 16);
+
+ ap = minim.loadFile("Genesis.mp3", 512);
+
+
+ ab = ap.mix;
+ abRight = ap.right;
+ abLeft = ap.left;
+
+ ap.play();
+ fft = new FFT(width, 44100);
+
+ cube = loadShape("t.obj");
+ cube.width = 1000;
+ cube.height = 1000;
+ // cube.translate(width/2, height/2, 0);
+
+ cube.rotateX(radians(+140));
+
+ // cube.translate(width/2, height/2, 0);
+ cube.rotateX(radians(10));
+ // cube.setFill(color(46, 100, 50));
+
+ System.out.println(cube.width + " " + cube.height);
+
+ }
+
+ float lerpedBuffer[] = new float[512];
+ float zAxis = 1;
+ int test = 1;
+ float average;
+ float cubeScale = 1;
+
+ public void grow()
+ {
+ if(cubeScale >= 1.1)
+ return;
+
+ cubeScale = cubeScale * 1.1f;
+ cube.scale(1.1f);
+ }
+
+ public void shrink()
+ {
+ if(cubeScale <= 0.9)
+ return;
+
+ cubeScale = cubeScale * 0.9f;
+ cube.scale(0.9f);
+ }
+
+ boolean polarity = true;
+ public void pulse()
+ {
+ if(polarity)
+ {
+ polarity = !polarity;
+ while(cubeScale < 1.1)
+ grow();
+ }
+ else
+ {
+ polarity = !polarity;
+ while(cubeScale > 1)
+ shrink();
+
+ }
+ }
+
+ float radius = 200;
+
+ float smoothedBoxSize = 0;
+
+ float rot = 0;
+
+
+ public void draw()
+ {
+
+
+
+ float[] bands = getSmoothedBands();
+ for(int i = 0 ; i < bands.length ; i ++)
+ {
+ float theta = map(i, 0, bands.length, 0, TWO_PI);
+
+ stroke(map(i, 0, bands.length, 0, 255), 255, 255);
+ float x = sin(theta) * radius;
+ float z = cos(theta) * radius;
+ float h = bands[i];
+ pushMatrix();
+ translate(x, - h / 2 , z);
+ rotateY(theta);
+ box(50, h, 50);
+ popMatrix();
+ }
+
+ smooth();
+
+ background(0);
+ lights();
+ shape(cube);
+ lights();
+
+
+
+ camera(0f, 0f, height * .86602f, 0f, 0f, 0f, 0f, 1f, 0f);
+ // cube.translate(0, 0, 10);
+ cube.rotateX(radians(0.5f));
+ // cube.rotateY(radians(0.25f));
+ // cube.translate(0, 0, -1f);
+
+
+ // float cgap = 255 / (float)ab.size();
+ // float half = height/2;
+
+ // float sum = 0;
+
+ // for(int i = 0; i < ab.size(); i++)
+ // {
+ // // if(ab.get(i) < 0.1 && ab.get(i) > -0.1)
+ // // lerpedBuffer[i] = lerp(lerpedBuffer[i], ab.get(i), 0.05f);
+ // // else
+ // lerpedBuffer[i] = lerp(lerpedBuffer[i], ab.get(i), 0.25f);
+ // sum += ab.get(i);
+ // }
+
+ // average = lerp(average, sum / ab.size(), 0.05f);
+
+
+ // for(int i = 0; i < ab.size(); i++)
+ // {
+
+ // stroke(cgap * i, 255, 255);
+ // float f = lerpedBuffer[i] * half * (1 + (i / 100));
+
+ // line(i - ab.size() / 2, half + f, i - ab.size() / 2, half - f);
+
+ // sum += abs(ab.get(i));
+
+ // // line(i / 4, half / 2, half / 2 + test, i / 2);
+ // // line(width-(i / 4), half / 2, half / 2 + test, i / 2);
+
+
+ // }
+
+ // int heighestIndex = 0;
+ // fft.forward(ab);
+ // for(int i = 0; i < fft.specSize(); i++)
+ // {
+ // line(i, height, i, height - fft.getBand(i));
+
+ // if(fft.getBand(i) > fft.getBand(heighestIndex))
+ // heighestIndex = i;
+
+ // }
+
+
+ // float freq = fft.indexToFreq(heighestIndex);
+ // fill(255);
+ // text("Freq: " + freq, 10, 50);
+ // if(freq > 200)
+ // pulse();
+
+
+
+
+ // fill(100);
+ // if(freq < 50
+ // )
+ // circle(100, 100, 100);
+
+
+ // float average = sum / ab.size();
+ // // System.out.printf("%.2f\n", average);
+
+ // noFill();
+
+ // float radius = average * 1000;
+ // float lerpedR = 100;
+ // lerpedR = lerp(lerpedR, radius, 0.25f);
+
+ // circle(width / 2, half, lerpedR);
+
+
+
+
+ }
+}
\ No newline at end of file
diff --git a/java/src/ie/tudublin/Main.java b/java/src/ie/tudublin/Main.java
index 27489f824..814f939f2 100644
--- a/java/src/ie/tudublin/Main.java
+++ b/java/src/ie/tudublin/Main.java
@@ -2,7 +2,9 @@
import example.CubeVisual;
import example.MyVisual;
-import example.RotatingAudioBands;
+import example.ExampleRotatingAudioBands;
+import example.test;
+import c21430484.*;
public class Main
{
@@ -10,7 +12,7 @@ public class Main
public void startUI()
{
String[] a = {"MAIN"};
- processing.core.PApplet.runSketch( a, new MyVisual());
+ processing.core.PApplet.runSketch( a, new BensVisual());
}
public static void main(String[] args)
diff --git a/java/src/ie/tudublin/Visual.java b/java/src/ie/tudublin/Visual.java
index 927fe57b1..27a119e1a 100644
--- a/java/src/ie/tudublin/Visual.java
+++ b/java/src/ie/tudublin/Visual.java
@@ -6,7 +6,7 @@
public abstract class Visual extends PApplet
{
- private int frameSize = 512;
+ private int frameSize = 1024;
private int sampleRate = 44100;
private float[] bands;
@@ -75,7 +75,7 @@ protected void calculateFrequencyBands() {
}
average /= (float) w;
bands[i] = average * 5.0f;
- smoothedBands[i] = lerp(smoothedBands[i], bands[i], 0.05f);
+ smoothedBands[i] = lerp(smoothedBands[i], bands[i], 0.03f);
}
}
diff --git a/test.txt b/test.txt
new file mode 100644
index 000000000..9daeafb98
--- /dev/null
+++ b/test.txt
@@ -0,0 +1 @@
+test