3D Cartesian coordinates



In 2D worlds (remember the graphs you had to draw at school?) things are relatively simple. You usually draw on a cartesian system of 2 perpendicular axes: the positive X axis points to the right, the positive Y axis points up, they meet at the origin of the system, at coordinates (0, 0).

2D graph paper

When working in 3D modelling, the way coordinates are calculated can get confusing: there are a few systems for doing this.

The first thing to know is which way the axes point. Especially important is the way the horizontal far-near axis runs.

into the screen
away from you
out of the screen
towards you

On these pictures, the blue arrow represents the far-near axis. In the picture on the left, it points into the screen, away from you. In the picture on the right, it points out of the screen towards you. Notice that the red axis still points to the right and the green axis points up, just like in your 2D graph. The difference is in the new axis, painted blue here: one set of people chose to use an axis pointing away from you (left picture), another group disagreed and pointed it towards you (right picture).

The red axis is still called X in all systems, and always points to the right. But of course, people disagree on how to call the other 2 axes.

Some say: we hold our graph paper vertically and don't want to rename those familiar axes, so the Z axis should be the far-near one!

Y points up, Z away from you
PowerOfVision (POV)
Direct3D (X)
ViewPoint (MTS,MTX/Z)

Others disagree: we look down at graphs, the new axis points upwards! The far-near axis points into the screen away from you.

Z points up, Y away from you
3DStudio (3DS)
Truespace (COB)
Terragen (TER)

Truespace in perspective view shows its axis in a peculiar way, as if the whole system is rotated so that the X axis goes from the top right of the screen to the bottom left towards you, the Y axis from top left to bottom right towards you, the Z axis points upwards as it should. Darn difficult to orient oneself there!

But another group disagree even more: sure graphs are held vertically, so X points to the right and Y points up... but we want the far-near axis to point towards us!.

Y points up, Z towards you
Renderware (RWX)
Wavefront (OBJ)
Atmosphere (AER)
Wings 3D

It seems no-one yet thought of putting the graph face down, or of hanging it upside-down... so that's it.

ActiveWorlds uses the Renderware engine:

Y points up, Z towards you


right and left handed

And what about rotations? Points and objects rotate in space. There are two systems in use: LEFT HANDED and RIGHT HANDED systems. Often, but not necessarily always, systems with the Z axis pointing out of the screen at you are right-handed, the others are left-handed.

Use the appropriate hand (left or right) to help you determine the positive direction of the rotation: right hand for right-handed systems like ActiveWorlds, left hand for left-handed systems like Accutrans and Truespace. Point your thumb in the positive direction of any axis (the way the arrow points of the pictures) and grab the axis with your other fingers. The way your other fingers point gives you the direction of positive rotation.

ActiveWorlds and Renderware (RWX) use RIGHT-HANDED rotations.


right and left handed

Faces are built by connecting vertices with imaginary lines called edges. The last vertex of the face is connected to the first one. If you look at the front of the face (the visible part usually), the vertices are edged in either a clockwise or anti-clockwise way.

Most left-handed systems put their vertices clockwise if you are facing the visible part of the face (i.e. remain left-handed, see below), right handed systems like Renderware (RWX) do that anti-clockwise (right-handed). Some systems like OpenGL and Direct3D have the ability of specifying an opposite winding direction, but most stick to their default winding. A notable exception is Truespace, that uses left-handed rotations and an opposite face-winding (right-handed).

As you see, you can use the hand method too here. Each face has what is called a Normal. This is like a handle or arrow sticking out of the visible side of the face at right angles to it. Grab the Normal with your thumb pointing away from the face, like you do to determine rotations: use your right hand for right-handed face-winding systems like ActiveWorlds (and Truespace, although it has left-handed rotations), and your left hand for left-handed face-winding systems like Accutrans. The way your fingers point gives you the direction in which vertices are plotted for the face.

You only need to bother about this if you make objects using a text processor (or 3d-file converters like me), like when making RWX objects in Notepad. Modelling programs make the faces automatically.

Renderware (RWX) uses a right-handed (anti-clockwise) system for building faces.



Each 3D application and file system has it's own units for measuring position and distance. This includes the modelling programs and the AW browser. Some wrongly call these units "metres" (or "meters" in American English), which can be very confusing.

I apply the name "metres" only at the final rendering stage, in the ActiveWorlds browser. That is the moment when you can relate to a world as a whole and experience distance, relative to the hight of avatars. In all other stages of the modelling process, it is better to use the term "units", which vary from system to system.

It would be nice if a "metre" in a modelling program (if the program has a selector for units) were equal to a metre in your world. This is seldom the case. For example, Active Worlds rescales all COB objects automatically by a factor of 1/10, so does Cobdump3, so in the case of Truespace, a unit there (whether called metre or something else) will convert fine to a metre in AW because of this.

The units used in Renderware RWX models are equivalent to the ActiveWorlds units (coordinates): they both represent 10 metres per unit. This is no coincidence, of course, ActiveWorlds is built around the Renderware engine.



When you model your objects for ActiveWorlds using a modeller, in Front view you are facing the front of the object. Imagine that you are building this object directly in an ActiveWorlds world, and that the origin of the object (its 0, 0, 0 vertex) is exactly at GZ and the object is not rotated in any way, it is at 0N 0W 0a 0: in this case the front of the object is facing North, and you are a bit more further North facing South and looking at it. That is what the front view represents in a modelling program. It also helps to see it this way when you make objects using Notepad or another text editor (see below). The big exception here again is Truespace: for a model to work in Active Worlds, build it from behind (i.e. in initial perspective view it will be facing to the left and away from you, following the negative Y axis. You can navigate in the scene to face it of course). If the model or avatar will be used directly in AW or converted with Cobdump3 to RWX, when you finish making it, lie it on its back (x rotation = 90). Accutrans does not require this. [Note: I am not an expert in Truespace.]

The modelling program will have its own coordinate system, rotation system, face-winding system and units. This should not affect the end result, because you can use some program like Accutrans to take care of the differences between systems. But, unless you rescale the object, it's size will translate directly to ActiveWorlds units, which are 10 metres long (or 20 clicks for builders): 1 unit of your modelling program translates to 1 unit of ActiveWorlds (10 metres). So if you think in your program's units when you design an object, you will need to scale down your objects to 1/10 of the size for use in ActiveWorlds: use a scaling factor of 0.1 for this. For Truespace and AW see above (UNITS).

Some modelling programs may have an automatic rescaling gadget, or let you see their units already rescaled for another system. You will need to consult the documentation, but you can always do a simple test: make a cube 1 unit wide, view it in the AW browser and compare the sizes. The chances are this cube in AW will be 10 metres wide, i.e. look 10 times larger than what you intended.

You can calculate the scaling factor, if you know the current height and desired height of your object: scaling factor = desired height divided by current height. Both heights must be in the same units!

If you use Notepad or another text editor to make or modify RWX files, you will notice that vertices are written like this:
Vertex -0.4000 0.2000 0.4000
The first coordinate is X (West is positive, East is negative), the second is Y (Up is positive, Down is negative), the last coordinate is Z (North is positive, South is negative). The units used by RWX translate to decametres (10 metres) per unit in ActiveWorlds, so this vertex is at 4m East, 2 metres Up and 4 metres North of the origin of the object.

If North-South-West-East confuses you, draw a compass on paper in the usual way: North points up, South down, East to the right and West to the left of the paper. Put next to North a +Z, and next to South a -Z. West takes a +X and East a -X. Then turn the compass so that North points towards you if you want the front of the object facing you, like it does in Front view of a modeller. You may want to add the word "front" next to the word "North".

Copyright © 2001, 2003 Alex Grigny de Castro
email: xelag@3dee.nl