projectiveplane(6x)
๐ projectiveplane ๐
okay so bestie, gather round, because this one is a whole experience and i need you to be seated for it. this is projectiveplane from the XScreenSaver manual, and it is genuinely one of the prettiest, nerdiest things you will ever put on a screen. no cap. ๐ฆ
โจ NAME โจ
projectiveplane โ draws a 4d embedding of the real projective plane. like, a whole four-dimensional mathematical object. on your monitor. for free. ๐
๐ธ SYNOPSIS ๐ธ
projectiveplane [--display host:display.screen] [--install] [--visual
visual] [--window] [--root] [--window-id number] [--delay usecs] [--fps]
[--mode display-mode] [--wireframe] [--surface] [--transparent]
[--appearance appearance] [--solid] [--distance-bands] [--direction-
bands] [--colors color-scheme] [--onesided-colors] [--twosided-colors]
[--distance-colors] [--direction-colors] [--change-colors] [--depth-
colors] [--view-mode view-mode] [--walk] [--turn] [--walk-turn]
[--orientation-marks] [--projection-3d mode] [--perspective-3d]
[--orthographic-3d] [--projection-4d mode] [--perspective-4d]
[--orthographic-4d] [--speed-wx float] [--speed-wy float] [--speed-wz
float] [--speed-xy float] [--speed-xz float] [--speed-yz float] [--walk-
direction float] [--walk-speed float]
(yeah that's a lot of flags. don't panic. part 2 of this page breaks them all down one by one and honestly? they all slay.) ๐
๐ซถ DESCRIPTION ๐ซถ
okay so the projectiveplane program shows a 4d embedding of the real projective plane. that's the whole vibe. โจ
you can do three things with it:
- walk on the projective plane ๐
- see it turn in 4d ๐
- walk on it while it turns in 4d ๐บ
and the fact that this surface is genuinely an embedding of the real projective plane in 4d is something you can literally see โ like, with your eyes โ in the depth colors mode (using static colors). here's the recipe, bestie: set all rotation speeds to 0 and the projection mode to 4d orthographic projection. in its default orientation, the embedding of the real projective plane will then project to the Roman surface, which has three lines of self-intersection. but here's the tea โ โ at those three lines of self-intersection, the parts of the surface that intersect have different colors, i.e., different 4d depths. so it's not actually touching itself. the projection is just lying to you. iconic behavior honestly. ๐
the real projective plane is a non-orientable surface. to make this apparent, the two-sided color mode can be used. alternatively, orientation markers (curling arrows) can be drawn as a texture map on the surface of the projective plane. while walking on the projective plane, you will notice that the orientation of the curling arrows changes โ which it must, because the projective plane is non-orientable. it literally cannot keep its arrows pointing the same way and that is not a bug, that is the whole personality. ๐ญ
the real projective plane is a model for the projective geometry in 2d space. one point can be singled out as the origin. a line can be singled out as the line at infinity, i.e., a line that lies at an infinite distance to the origin. the line at infinity, like all lines in the projective plane, is topologically a circle. points on the line at infinity are also used to model directions in projective geometry.
the origin can be visualized in different manners:
- when using distance colors (and using static colors), the origin is the point that is displayed as fully saturated red, which is easier to see as the center of the reddish area on the projective plane. ๐
- alternatively, when using distance bands, the origin is the center of the only band that projects to a disk.
- when using direction bands, the origin is the point where all direction bands collapse to a point.
- finally, when orientation markers are being displayed, the origin is the point where all orientation markers are compressed to a point.
the line at infinity can also be visualized in different ways:
- when using distance colors (and using static colors), the line at infinity is the line that is displayed as fully saturated magenta. ๐
- when two-sided (and static) colors are used, the line at infinity lies at the points where the red and green "sides" of the projective plane meet โ of course, the real projective plane only has one side, so this is a design choice of the visualization. ๐
- alternatively, when orientation markers are being displayed, the line at infinity is the place where the orientation markers change their orientation.
note: when the projective plane is displayed with bands, the orientation markers are placed in the middle of the bands. for distance bands, the bands are chosen in such a way that the band at the origin is only half as wide as the remaining bands, which results in a disk being displayed at the origin that has the same diameter as the remaining bands. this choice, however, also implies that the band at infinity is half as wide as the other bands. since the projective plane is attached to itself (in a complicated fashion) at the line at infinity, effectively the band at infinity is again as wide as the remaining bands. however, since the orientation markers are displayed in the middle of the bands, this means that only one half of the orientation markers will be displayed twice at the line at infinity if distance bands are used. if direction bands are used, or if the projective plane is displayed as a solid surface, the orientation markers are displayed fully at the respective sides of the line at infinity.
the program projects the 4d projective plane to 3d using either a perspective or an orthographic projection. which of the two alternatives looks more appealing is up to you โ no judgement here, it's your screen. ๐ however, two famous surfaces are obtained if orthographic 4d projection is used: the Roman surface and the cross cap. if the projective plane is rotated in 4d, the result of the projection for certain rotations is a Roman surface and for certain rotations it is a cross cap. the easiest way to see this is to set all rotation speeds to 0 and the rotation speed around the yz plane to a value different from 0. however, for any 4d rotation speeds, the projections will generally cycle between the Roman surface and the cross cap. the difference is where the origin and the line at infinity will lie with respect to the self-intersections in the projections to 3d. ๐
the projected projective plane can then be projected to the screen either perspectively or orthographically. when using the walking modes, perspective projection to the screen will be used.
there are three display modes for the projective plane:
- mesh (wireframe)
- solid
- transparent
furthermore, the appearance of the projective plane can be as a solid object or as a set of see-through bands. the bands can be distance bands, i.e., bands that lie at increasing distances from the origin, or direction bands, i.e., bands that lie at increasing angles with respect to the origin.
when the projective plane is displayed with direction bands, you will be able to see that each direction band (modulo the "pinching" at the origin) is a Moebius strip, which also shows that the projective plane is non-orientable. ๐ฆ
finally, the colors with which the projective plane is drawn can be set to one-sided, two-sided, distance, direction, or depth:
- in one-sided mode, the projective plane is drawn with the same color on both "sides."
- in two-sided mode (using static colors), the projective plane is drawn with red on one "side" and green on the "other side." as described above, the projective plane only has one side, so the color jumps from red to green along the line at infinity. this mode enables you to see that the projective plane is non-orientable. ๐ if changing colors are used in two-sided mode, changing complementary colors are used on the respective "sides."
- in distance mode, the projective plane is displayed with fully saturated colors that depend on the distance of the points on the projective plane to the origin. if static colors are used, the origin is displayed in red, while the line at infinity is displayed in magenta. if the projective plane is displayed as distance bands, each band will be displayed with a different color. ๐
- in direction mode, the projective plane is displayed with fully saturated colors that depend on the angle of the points on the projective plane with respect to the origin. angles in opposite directions to the origin (e.g.,
15and205degrees) are displayed in the same color, since they are projectively equivalent. if the projective plane is displayed as direction bands, each band will be displayed with a different color. - finally, in depth mode the projective plane is displayed with colors chosen depending on the 4d "depth" (i.e., the
wcoordinate) of the points on the projective plane at its default orientation in 4d. as discussed above, this mode enables you to see that the projective plane does not intersect itself in 4d. ๐ฅ
the rotation speed for each of the six planes around which the projective plane rotates can be chosen. for the walk-and-turn mode, only the rotation speeds around the true 4d planes are used โ that's the xy, xz, and yz planes. ๐
furthermore, in the walking modes the walking direction in the 2d base square of the projective plane and the walking speed can be chosen. the walking direction is measured as an angle in degrees in the 2d square that forms the coordinate system of the surface of the projective plane:
- a value of
0or180means that the walk is along a circle at a randomly chosen distance from the origin (parallel to a distance band). โญ - a value of
90or270means that the walk is directly from the origin to the line at infinity and back (analogous to a direction band). โก๏ธ - any other value results in a curved path from the origin to the line at infinity and back. ๐
this program is somewhat inspired by Thomas Banchoff's book "Beyond the Third Dimension: Geometry, Computer Graphics, and Higher Dimensions", Scientific American Library, 1990. ๐
okay that's the whole description and honestly? we ate. but hold on bestie โ this is only part 1. there's a whole part 2 with every single option, flag and default coming your way, so don't go anywhere. ๐โจ
โจ OPTIONS โจ
okay so projectiveplane takes all of these, and there are a lot, but likeโฆ we're gonna get through them together bestie ๐ซถ
your basic window stuff ๐ช
--windowโ draw on a brand-new window that it makes just for you. this is the default, periodt.--rootโ draw on the root window instead. living that desktop-wallpaper life.--window-idnumber โ draw on the specific window with that id. yes, that one. you know the one.--installโ install a private colormap for the window. it's giving exclusive ๐--visualvisual โ pick which visual to use. legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual.
pacing & stats โฑ๏ธ
--delaymicroseconds โ how much of a delay should be introduced between steps of the animation. default is10000, which is literally1/100thsecond.--fpsโ display the current frame rate, CPU load, and polygon count. number go up ๐
HOW IT SHOWS UP (mode) ๐
the following four options are mutually exclusive โ you pick one, you don't get to have all four. they decide how the projective plane gets displayed.
--mode randomโ display the projective plane in a random display mode. this is the default!--mode wireframe(shortcut:--wireframe) โ display it as a wireframe mesh. skeleton vibes, iconic.--mode surface(shortcut:--surface) โ display it as a solid surface. solid, literally.--mode transparent(shortcut:--transparent) โ display it as a transparent surface. see-through queen.
HOW IT LOOKS (appearance) ๐ง
these next three are also mutually exclusive. they decide what the projective plane looks like.
--appearance randomโ display it with a random appearance. default, obviously.--appearance solid(shortcut:--solid) โ display the projective plane as a solid object.--appearance distance-bands(shortcut:--distance-bands) โ display it as see-through bands that lie at increasing distances from the origin.--appearance direction-bands(shortcut:--direction-bands) โ display it as see-through bands that lie at increasing angles with respect to the origin.
COLORING IT ๐จ
the following four options are mutually exclusive. (yes bestie, the page says "four" and then lists six. we don't make the rules, we just report them ๐) they determine how to color the projective plane.
--colors randomโ display it with a random color scheme. default, slay.--colors onesided(shortcut:--onesided-colors) โ display it with a single color.--colors twosided(shortcut:--twosided-colors) โ display it with two colors: one color for one "side" and the complementary color on the "other side." for static colors, those colors are red and green. worth knowing: the line at infinity lies at the points where the red and green "sides" of the projective plane meet โ i.e., where the orientation of the projective plane reverses. that's the tea โ--colors distance(shortcut:--distance-colors) โ display it with fully saturated colors that depend on the distance of the points on the projective plane to the origin. for static colors, the origin shows up in red, while the line at infinity shows up in magenta. and if the projective plane is displayed as distance bands, each band gets its own different color.--colors direction(shortcut:--direction-colors) โ display it with fully saturated colors that depend on the angle of the points on the projective plane with respect to the origin. angles in opposite directions to the origin (like15and205degrees) get the same color, because they're projectively equivalent. if it's displayed as direction bands, each band gets a different color.--colors depth(shortcut:--depth) โ display it with colors chosen depending on the 4d "depth" (i.e., thewcoordinate) of the points on the projective plane at its default orientation in 4d.
static or changing? ๐ซ
these decide whether the colors are locked in or doing the most:
--change-colorsโ change the colors with which the projective plane is displayed dynamically.--no-change-colorsโ use static colors to display it. this is the default.
HOW YOU'RE VIEWING IT ๐
the following four are mutually exclusive. they determine how to view the projective plane.
--view-mode randomโ view it in a random view mode. default!--view-mode turn(shortcut:--turn) โ view the projective plane while it turns in 4d.--view-mode walk(shortcut:--walk) โ view it as if walking on its surface. main character energy, honestly ๐ถโโ๏ธ--view-mode walk-turn(shortcut:--walk-turn) โ view it as if walking on its surface, and additionally the projective plane turns around the true 4d planes (thexy,xz, andyzplanes).
orientation marks ๐ธ
--orientation-marksโ display orientation marks on the projective plane.--no-orientation-marksโ don't display them. this is the default.
3D โ 2D projection ๐
the following three are mutually exclusive. they decide how the projective plane is projected from 3d to 2d (i.e., to the screen).
--projection-3d randomโ project from 3d to 2d using a random projection mode. default.--projection-3d perspective(shortcut:--perspective-3d) โ project from 3d to 2d using a perspective projection.--projection-3d orthographic(shortcut:--orthographic-3d) โ project from 3d to 2d using an orthographic projection.
4D โ 3D projection ๐ฆ
the following three are mutually exclusive. they decide how the projective plane is projected from 4d to 3d.
--projection-4d randomโ project from 4d to 3d using a random projection mode. default.--projection-4d perspective(shortcut:--perspective-4d) โ project from 4d to 3d using a perspective projection.--projection-4d orthographic(shortcut:--orthographic-4d) โ project from 4d to 3d using an orthographic projection.
rotation speeds ๐
the following six options set the rotation speed of the projective plane around the six possible hyperplanes. speed is measured in degrees per frame. keep them relatively small โ like less than 4 in magnitude, bestie. some very important notes before you go changing numbers:
- in walk mode, all speeds are ignored.
- in walk-and-turn mode, the 3d rotation speeds are ignored (that's the
wx,wy, andwzspeeds). - in walk-and-turn mode, you have to use smaller speeds than in turn mode to get a nice visualization. so, in walk-and-turn mode, the speeds you picked get divided by 5 internally. iconique behaviour, honestly.
the speeds:
--speed-wxfloat โ rotation speed around thewxplane (default:1.1).--speed-wyfloat โ rotation speed around thewyplane (default:1.3).--speed-wzfloat โ rotation speed around thewzplane (default:1.5).--speed-xyfloat โ rotation speed around thexyplane (default:1.7).--speed-xzfloat โ rotation speed around thexzplane (default:1.9).--speed-yzfloat โ rotation speed around theyzplane (default:2.1).
walking ๐ถ
these two decide your walking speed and direction.
--walk-directionfloat โ the walking direction, measured as an angle in degrees in the 2d square that forms the coordinate system of the surface of the projective plane (default:83.0). here's how the angles work:0or180โ the walk goes along a circle at a randomly chosen distance from the origin (parallel to a distance band).90or270โ the walk goes directly from the origin to the line at infinity and back (analogous to a direction band).- any other value โ a curved path from the origin to the line at infinity and back.
--walk-speedfloat โ the walking speed, measured in percent of some sensible maximum speed (default:20.0).
๐ฎ INTERACTION ๐ฎ
okay this part is fun. if you run this program in standalone mode in its turn mode, you can rotate the projective plane by dragging the mouse while pressing the left mouse button. that rotates it in 3D โ i.e., around the wx, wy, and wz planes.
if you press shift while dragging the mouse with the left button pressed, the projective plane is rotated in 4D โ i.e., around the xy, xz, and yz planes. the glow-up is real โจ
to examine the projective plane at your leisure, it's best to set all speeds to 0. otherwise, the projective plane will rotate while the left mouse button is not pressed and it will not sit still for you. ๐
heads up bestie: this kind of interaction is not available in the two walk modes. no mouse-dragging for you there.
๐ ENVIRONMENT ๐
DISPLAYโ to get the default host and display number.XENVIRONMENTโ to get the name of a resource file that overrides the global resources stored in theRESOURCE_MANAGERproperty.XSCREENSAVER_WINDOWโ the window ID to use with--root.
๐ SEE ALSO ๐
X(1), xscreensaver(1)
ยฉ๏ธ COPYRIGHT ยฉ๏ธ
Copyright ยฉ 2013-2020 by Carsten Steger. Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. No representations are made about the suitability of this software for any purpose. It is provided "as is" without express or implied warranty.
๐ AUTHOR ๐
Carsten Steger <carsten@mirsanmir.org>, 06-jan-2020.
aaaaand that's the whole page, bestie, we ate that fr fr ๐
this one's from X Version 11, version 6.17-1.fc44, dated 13-Oct-2026 โ go forth and rotate some planes in 4d, you've got this ๐ฆ๐
๐ฆ where this page comes from
- fedora 44: xscreensaver-gl-extras 1:6.17-1.fc44 ยท MIT
- ๐ girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms