Re: Floors as context and frames of reference

Jed Lengyel (jed@graphics.cornell.edu)
Wed, 9 Nov 1994 16:02:38 -0500

> Date: Mon, 7 Nov 1994 09:11:56 -0400
> From: eam3@po.cwru.edu (EMeyer)
> [...]
> Interesting approach. However, I have a few doubts. How do we keep the
> avatar on the floor? Will a floor node implies keeping the POV at a
> certain constant height above the floor, or do we implement "gravity?"
> Will the floor node's "neighbor pointers" allow the avatar to walk into
> empty space--consider a catwalk without handrails--or must the pointers
> always connect to something 'tangible?' If so, must the neighbor be a
> 'physical' neighbor, or can I link a floor node to another which is
> separated from the first, acheiving a sort of teleportation? If not, will
> the avatar fall to the floor below (assuming one exists)? We're back to
> gravity again, which may be too expensive to implement.

Each floor section gives a local 2D coordinate frame. The edge links
(neighbor pointers) are connections between neighboring coordinate
frames. Navigation is reduced to local 2D motions separated by
"jumps" between coordinate frames. These jumps may be imperceptible
if the frames are continuous. Or a jump may require a position change
(either a step, a leap, or a teleportation depending on the distance
to be bridged.)

For example, I would express a set of stairs as a series of steps,
each a floor, with links going up the stairs. A jump between the step
coordinate frames would be expressed as a "step up" or a "step down"
elevation change (done smoothly or not depending on the quality of the
browser.)

Consider the catwalk... by marking a catwalk floor panel as "floor",
the browser knows to use the local catwalk floor coordinate frame.
The edge links going along the path of the catwalk say that we can
move continuously from the current panel onto the next one. This
expresses the author's intent. The sideways motion, jumping off of
the catwalk, could either be marked as an edge link (if the author
wants you to jump off) or be marked as a "too high" null link (if the
author wants to keep you safe on the catwalk --- and the author could
even provide handrails to draw to let you know you're safe.)

A smart browser would certainly let you override the author's intent.
It could look for the floor below the catwalk and pretend there's an
edge link to that coordinate system, and execute a "jump." The
physics is left up to the browser.

By marking the catwalk floor as "floor" and not marking the handrail,
the typical browser knows not to "walk" on the handrail, which is what
the author intends.

> Additionally, you suggest this approach because it allows for a simple
> 2D test. Does that mean that a floor node can only be contained within a
> flat plane or part of an object which is represented by a flat plane (like
> the facet of a dodecahedron)? What if I want the ability to walk around a
> sphere? Given the proposal of including an "up vector" in a floor node,
> this might be difficult to implement. How about a Moebius floor--how is up
> resolved? What happens if a flat plane is given an up vector which is at a
> 45-degree angle to the plane? Will the avatar slide along the floor? What
> if the up vector in fact points down?

A typical scene would have the same up vector everywhere. This means
that the viewing angles wouldn't change as you went from floor frame
to floor frame. For example, going up steps would be just an elevation
change and not a viewing angle change. If the up vector is constant,
moving across a tilted plane would be like walking up a ramp. The
physics of sliding, falling, etc. are left to the browser.

If the up vector changes locally, then moving from one floor to another
involves a viewing angle change as well as a positional change. For
example, the floors of the exercise room on the spaceship in 2001 would
be the inside of a cylinder, with the up vectors always pointing to the
axis of the cylinder. As you move from floor section to floor section,
the browser would change the viewing angles so that your head is always
up and pointing towards the axis of the cylinder.

For walking around on a sphere, each floor neighborhood is a curved
section of the sphere that is locally 2D. The up vector is always
pointing away from the center of the sphere.

With a local up vector, the Moebius floor is not hard. Imagine the
geometry of a Moebius strip approximated by rectangles. You need to
have two "floors" for each of these rectangles. Stand on one of these
rectangles and make "up" be normal to the surface. Then go to the
neighboring rectangle and again make "up" be normal to the surface.
You can continue around until you get back where you started ---
touching each rectangle twice, but always having a locally consistent
coordinate frame.

> I have had some thoughts about these sorts of things, but I'm afraid my
> ideas are all far too computationally expensive. If this issue starts to
> become a hot one, I'll put together a Web page and post the URL.

I'd like to hear your thoughts.
Jed