summaryrefslogtreecommitdiffstats
path: root/hacks/config/etruscanvenus.xml
blob: 090b102db00bd9866c11e592a575422f41041811 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
<?xml version="1.0" encoding="UTF-8"?>

<screensaver name="etruscanvenus" _label="EtruscanVenus" gl="yes">

  <video href="https://www.youtube.com/watch?v=p3MgGyie6-I"/>

  <command arg="-root"/>

  <hgroup>
    <select id="view-mode">
      <option id="walk"      _label="Random motion"/>
      <option id="walk"      _label="Walk"      arg-set="-view-mode walk"/>
      <option id="turn"      _label="Turn"      arg-set="-view-mode turn"/>
    </select>

    <boolean id="orientation-marks" _label="Show orientation marks"
              arg-set="-orientation-marks"/>
  </hgroup>

  <hgroup>
    <boolean id="deform" _label="Deform the surface"
              arg-unset="-no-deform"/>

    <number id="deform-speed" type="slider" arg="-deformation-speed %"
            _label="Deformation speed"
            _low-label="1.0" _high-label="100.0"
            low="1.0" high="100.0" default="10.0"/>

    <number id="init-deform" type="slider" arg="-initial-deformation %"
            _label="Initial deformation"
            _low-label="0.0" _high-label="3999.0"
            low="0.0" high="3999.0" default="0.0"/>
  </hgroup>


  <hgroup>

    <vgroup>
      <select id="display-mode">
        <option id="random"      _label="Random surface"/>
        <option id="wire"        _label="Wireframe mesh"      arg-set="-mode wireframe"/>
        <option id="surface"     _label="Solid surface"       arg-set="-mode surface"/>
        <option id="transparent" _label="Transparent surface" arg-set="-mode transparent"/>
      </select>

      <select id="appearance">
        <option id="random" _label="Random pattern"/>
        <option id="solid"  _label="Solid object"    arg-set="-appearance solid"/>
        <option id="bands"  _label="Distance bands"  arg-set="-appearance distance-bands"/>
        <option id="bands"  _label="Direction bands" arg-set="-appearance direction-bands"/>
      </select>

      <select id="colors">
        <option id="random"   _label="Random coloration"/>
        <option id="twosided" _label="One-sided"        arg-set="-colors one-sided"/>
        <option id="twosided" _label="Two-sided"        arg-set="-colors two-sided"/>
        <option id="rainbow"  _label="Distance colors"  arg-set="-colors distance"/>
        <option id="rainbow"  _label="Direction colors" arg-set="-colors direction"/>
      </select>

      <boolean id="change-colors" _label="Change colors"
                arg-unset="-no-change-colors"/>

      <select id="projection">
        <option id="random"       _label="Random Projection"/>
        <option id="perspective"  _label="Perspective"  arg-set="-projection perspective"/>
        <option id="orthographic" _label="Orthographic" arg-set="-projection orthographic"/>
      </select>
    </vgroup>

    <vgroup>
      <number id="speed-x" type="slider" arg="-speed-x %"
              _label="X rotation speed"
              _low-label="-4.0" _high-label="4.0"
              low="-4.0" high="4.0" default="1.1"/>

      <number id="speed-y" type="slider" arg="-speed-y %"
              _label="Y rotation speed"
              _low-label="-4.0" _high-label="4.0"
              low="-4.0" high="4.0" default="1.3"/>

      <number id="speed-z" type="slider" arg="-speed-z %"
              _label="Z rotation speed"
              _low-label="-4.0" _high-label="4.0"
              low="-4.0" high="4.0" default="1.5"/>
    </vgroup>

    <vgroup>
     <number id="walk-direction" type="slider" arg="-walk-direction %"
             _label="Walking direction"
             _low-label="-180.0" _high-label="180.0"
             low="-180.0" high="180.0" default="83.0"/>

     <number id="walk-speed" type="slider" arg="-walk-speed %"
             _label="Walking speed"
             _low-label="1.0" _high-label="100.0"
             low="1.0" high="100.0" default="20.0"/>

     <number id="delay" type="slider" arg="-delay %"
             _label="Frame rate" _low-label="Low" _high-label="High"
             low="0" high="100000" default="10000"
             convert="invert"/>
    </vgroup>

    <vgroup>
     <xscreensaver-updater />
     <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
    </vgroup>

  </hgroup>

  <_description>
A 3D immersion of of a Klein bottle that smoothly deforms between the
Etruscan Venus surface, the Roman surface, the Boy surface, and the
Ida surface.  Topologically, all surfaces are Klein bottles, even the
Roman and Boy surfaces, which are doubly covered and therefore appear
to be an immersed real projective plane.

You can walk on the Klein bottle or rotate it in 3D.  Since all the
surfaces except the Ida surfaces have points where the surface normal
is not well defined for some points, walking is performed on the Ida
surface.  Furthermore, it is possible to smoothly deform the surface
between the Etruscan Venus surface, the Roman surface, the Boy
surface, and the Ida surface surface while turning it.

Inspired by George K. Francis's book "A Topological Picturebook",
Springer, 1987, George K. Francis's paper "The Etruscan Venus" in
P. Concus, R. Finn, and D. A. Hoffman: "Geometric Analysis and
Computer Graphics", Springer, 1991, and a video entitled "The Etruscan
Venus" by Donna J. Cox, George K. Francis, and Raymond L. Idaszak,
presented at SIGGRAPH 1989.

https://en.wikipedia.org/wiki/Boy%27s_surface
https://en.wikipedia.org/wiki/Roman_surface
https://en.wikipedia.org/wiki/Klein_bottle
http://mathworld.wolfram.com/BoySurface.html
http://mathworld.wolfram.com/RomanSurface.html
http://mathworld.wolfram.com/EtruscanVenusSurface.html
http://mathworld.wolfram.com/IdaSurface.html

Written by Carsten Steger; 2020.
  </_description>
</screensaver>