3D Coding TAT - Terminology & Incorrect Phrazes
Here is a brief list of 'jargon' words which I used in this document. Please forgive any errors in the naming of concepts, algorithms or terminology. I would say about 95% of the ideas and explanations in this file have been written without seeing any form of render descriptions, techniques or in-depth details about the described methods, so hopefully most of this stuff will be new, correct or easy to understand. Where ever possible I tried to avoid techno-babble or maths jargon but when I did use it to try and explain things in every day terms or real world things (trees, plants, planets, webs etc.).
LEVEL or MAP:
This is the current region of the game world or universe which is being played through by the player. This can be the inside of a building, an open air park or the bottom of the ocean. It's basically the environment currently being drawn and explored.
OBJECT or MODEL:
I think the term model is the most correct one. It is one, single, self-contained 3d item such as a chair, door, building or creature which are used to furnish the 3d games environment. This name also applies to monsters/creatures.
Anything which is straight like a ruler, a continuous line with no curve or bend to it. I have used this to describe sequential processes or data structures aswell as they tend to happen in an A,B,C ... Z manner. This list method is almost always the best possible way for any CPU to process things.
A very, very useful method to connect two seperated regions of memory by using an address or 'pointer' to indicate where the next or previous region of memory is. It's like following a route by using road signs. Each sign points to the next stage in the journey. So a sign could be called a 'link' like that in a chain. It simply tells you where another item is located in memory. There are many different uses for linked-lists or "chains" as some people call them, these include circular lists, sorting, fast insertion or deletion and so on... and not forgetting binary, multi-way or ringed trees. The great advantages of using linked-lists or links is that items do NOT have to be stored in a sequential order, the last item can be located in memory before the first or seperated by megabytes of memory.
In this document I have used 3 distinct types of linked-lists. These are:
These allow 1 axis of travel and are true lists. This name is used to describe 2-way linked-lists which are still only 1d (i.e. you can traverse forewards or backwards, but still it's just ONE axis). They allow movement along a line in a linear, list-like way.
These are the next step up from 1d, they allow travel in 2-dimensions (forewards, backwards AND left, right). They typically require 4 links for a node (2 for each axis). These allow movement along a rectangle in a 2d-map way.
These have 3 axises of travel and can be used to navigate through a 3-dimensional space. They normally need 6 links for each node (2 for each of the 3 axises). These allow movement in a cube-like way, we can go up/down aswell as north, south, east and west.
The process of drawing the graphical items which can be seen from a particular view-point and angle. It's just a fancy word for "drawing the scene".
RENDERER or ENGINE:
This is the collection of code which draws all the graphics and performs things like back-face culling, clipping, shading and texture-mapping etc. It can be thought of as a group of drawing routines or as a complex interactive graphics system or whatever....
This is a way to describe an item by giving it a number or code which can be used to identify it. Rather than redefining all of an item's data structure we can simply reuse its token or code-number. I have used tokens in two ways, to save memory (avoiding having to repeat the same data again) and to direct seperated items back to the same destination.
CREATURES, MONSTERS & BEINGS:
These mean all the same thing, the non-player entites in a game. They move, kill and interact with the player and background.
TEXTURES & BITMAPS:
A texture is basically a rectangular bitmap which is used to fill a polygon with pixels or "texels" as people like to call 'em these days (textured-pixels, I guess).
This is an abbreviation of "textured-pixels", i.e. a collection of pixels which are taken from a texture bitmap.
SURFACES & FACES:
Yep, they are almost identical. But a face is normally a single polygon used to built an object and a surface is all the connected polygon faces that are used to describe a solid object or landscape terrain (hills and valleys for example). I think some people call the surface of an object/model a "skin" because it is pulled over the vertex skeleton I guess. E.g. a cube has 6 faces, but 1 surface or skin.
I have sometimes interchanged the words "face" and "polygon" at times, but they are used to mean the same thing.
The term 'side' has been used to mean two things. 1. a single, straight edge of a polygon (e.g. square = 4 sides) 2. part of the object/model which can be seen (front/back side)
I have only used convex polygons in ALL the examples as they are the fastest to draw and have special properties. Also I use non-skewed (plane) polygons where ALL of its vertices lie on a flat plane.
A flat, infinite surface without start or end. Like a mirror or the cover of a book it does not curve so no part of the plane can be hidden behind any other part of it. Also it can be tilted at any angle not just vertically or horizontally.
This is a collection of flat 2d polygons which have been glued together to represent a 2d object or 'model' as I think it's correctly called. Examples of polyhedra are cubes, boxes, pyramids.
I have used this to mean the inside 3-d area within a polyhedra of some kind (cube, pyramid, dodecahedron etc.) The volume of a cup is the interior area defined by the exterior faces. Also I have used this term to denote the interior space of a room, corridor or level. In this case the exterior space is totally ignored (null-space) because it can never been seen or ventured into.
A very distant point or boundary at which objects are not drawn any more as they are considered as being too far away and too small to be seen. In most cases this means Z-Clipping.
VIEW-PLANE or VIEW-SCREEN:
This is the 2d area on your monitor on which 3d objects are drawn and filled. Anything behind this is considered hidden (because you can only see in one direction at a time). Between the view-plane and the horizon every part of the scene is considered and possibly drawn.
This is part of the games environment (world/universe) which can be seen from the current view-point in the current direction.
This is (might be) filling a polygon with a texture/bitmap a number of times like a drawing a wall using just one brick by repeating it in both directions. Like the tiles on a bathroom wall for example.
To remove some, all or no part of an item. Normally used to only draw the parts of a polygon or bitmap which appears within our view-screen's boundary. Any part above, below, left or right of this boundary is clipped and not used.
Normally used to describe back-face culling this means to reject or clip an entire item such as an 3d model or polygon. In the case of back-face culling the direction of a face is tested against the viewing direction and if it is opposite then the polygon/face is totally ignored and not drawn.
Just like a piece of lined graph paper an area (or 'space') is divided into small sub-areas and each sub-area is bound by the surrounding sides. The parallel horizontal and vertical sides of a grid are defined at a regular interval (i.e. every Nth pixel). Each sub-area or 'cell' in a grid is like a brick in a wall, it has the identical size and orientation as all of its neighbours.
CELL or ELEMENT:
This is the smallest part of a grid, net or mesh and can be thought of as being a brick in a wall or a single piece of a jigsaw.
This is a grid which is overlaid over a surface or collection of randomly placed items so that some form of locality in their relative position can be exploited. So a 'net' is like the grid reference lines in an atlas or road map. Just like in the case of a fishing net items within a single square can be handling more easily than trying to deal with the entire catch in one go.
Like a Grid except the vertices (where two sides meet) can be or have been moved. This is like taking a piece of mesh fencing and distorting it by squashing or stretching parts of it. The most important thing to remember is that vertices and so the sides (and neighbouring squares) do NOT line up into a straight line as they do with a grid or net. This means each point where two sides meet (a vertex) must be defined and stored seperately. Where a grid has equally spaced divisions a mesh does not. The cells in a mesh do NOT have a regular size or shape to them.
This is the ugly blocky pixels problem that appears on greatly magnified items. For example when a 32x10 bitmap is used to fill a 320x200 screen the result is a grid of 10x10 pixel blocks and this doesn't look very realistic. The problem is caused when a small item is magnified to fill a large area. A much nicer solution would employ a maximum magnification of 1:1 so that pixels are only ever drawn once but this would chew up tons of memory and be much, much slower.
The method by which any number of values between 2 or more known data points are calculated. In the simplest form this can be 'linear interpolation' where the various intercept points along a straight line is calculated given its two end coordinates. Polygons, Lines, Voxel maps, Texture mapping and Splines are all examples of interpolation but the idea is the same, values in the interval between known data values are generated/calculated, this can be to ANY resolution (infinite).
BEZIER CURVES, ARCS & SPLINES:
These are ways to describe and draw non-linear (curved) lines. The Bezier curves normally use 4 'control points' which define the overall shape of the curve. An arc has normally 3 controls and a Spline can have any number. Also an arc has a regular shape to it usually part of a large circle or ellipse.