Author: Mark Danks

## Basic Objects

There are a number of objects which are the foundation for GEM. These objects are used in every patch and control the graphics and rendering.

gemwin - The window manager
gemhead - The start of a rendering chain
manips - Move an object in the window
geos - Render a shape

### gemwin

The graphics window is created and destroyed with the gemwin object. With the gemwin object, you can set the default size of the graphics window, create and destroy the graphics window, turn on and off rendering, etc. All basic GEM patches will have the following gemwin object with these messages:

The create and destroy messages will display and remove the graphics window. The 1 and 0 messages start and stop rendering.

### gemhead

The gemhead object is the start of every rendering chain. A simple patch, which is located in examples/gem_basic/gem1.redSquare.pd looks like:

This patch will render a red square. The gemhead object signifies the start of rendering. The color object sets the color for all objects after it in the chain. The square object renders a square into the graphics window based on the current color, texturing, and transformations. In this case, there is no texturing and no transformation.

Every rendering chain MUST start with a gemhead. If you do not put a gemhead at the beginning of the chain, then nothing will be rendered for that part of the patch.

### manips

In the patch gem_basic/gem2.cube.pd, the translateXYZ object is introduced.

The graphics are transformed and moved by the manipulator objects, or the manips. GEM has the following manips:

color - set the color with a vector
colorRGB - set the color with 3 discrete values
rotate - rotate with an angle and vector
rotateXYZ - rotate with 3 discrete values
scale - scale with a vector
scaleXYZ - scale with 3 discrete values
translate - translate with a vector
translateXYZ - translate with 3 discrete values

To understand the difference between the vector and discrete values version, realize that everything in is defined in 3 dimensions. These dimensions can be XYZ values, or RGB colors.

The two translate objects above will do exactly the same thing in a patch, but they provide two different ways to do it. translate accepts a scalar and vector. translateXYZ accepts three floats which specify a point in space. The manips will transform any object which appears after it in the rendering chain.

### geos

Up above, we saw the square and cube objects. The other primary geos are:

square - render a square
circle - render a circle
triangle - render a triangle
cube - render a cube
sphere - render a sphere
cone - render a cone

The square, circle, cube, and triangle objects have a right-hand inlet to set the size of the shape. The default size is 1.

The cone and sphere objects are not perfectly smooth. They are actually composed of a number of polygons. In order to control the rendering better, the middle inlet is the size of the object, while the right-hand inlet is the number of slices to define the shape. Take a look at the patch gem_basic/gem3.sphere.pd to see how the number of slices can change the look of a sphere. Don't worry about the world_light object, it is just there to make it easier to see the difference in the number of slices. Make sure to click the 'lighting 0' message before closing the patch (if you don't, then other patches will probably be completely black until you quit and restart pd/GEM).

Your graphics window should look like this for 5 and 15 slices:

Obviously, the more slices that you use, the better the sphere looks. However, each slice adds more polygons, which can slow down your frame rate. In computer graphics, there is always a trade off between resolution and speed.

[return]