**PLEASE NOTE THE CODE IN THIS THREAD WILL NOT WORK IN CODEA 1.3.1**

**I’ve opened this thread up to everyone so people can examine and comment on the new 3D stuff**

There is no documentation for this stuff yet. So this thread will serve as the beta documentation for now.

You can grab a sample 3D scene here: http://twolivesleft.com/Codea/Projects/3D_Test.codea

Source code on pastebin: http://pastebin.com/gJ6CxXD2

**Basic Matrix Control**

```
multMatrix( m )
```

Multiplies matrix *m* against the current model matrix.

```
modelMatrix()
modelMatrix( m )
```

Called with no parameters, returns the current model matrix. When called with a matrix parameter **modelMatrix** sets the current model matrix to the specified matrix. Defaults to identity.

```
projectionMatrix()
projectionMatrix( m )
```

Called with no parameters, returns the current projection matrix. When called with a matrix parameter **projectionMatrix** sets the current projection matrix to the specified matrix.

The default projection is an orthographic projection starting at the lower left of the screen and extending WIDTH, HEIGHT to the upper right corner of the screen.

```
viewMatrix()
viewMatrix( m )
```

Called with no parameters, returns the current view matrix. When called with a matrix parameter **viewMatrix** sets the current view matrix to the specified matrix. Defaults to identity.

**Basic Types**

`matrix`

Represents a 4x4 matrix (column major). Supports the following operations:

```
m1 = matrix() -- creates an identity matrix
m2 = matrix( 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 )
m = m1 * m2 -- matrix multiplication
m = m1 * 5 -- scalar multiplication
m = m1 / 5 -- scalar division
m = m:rotate( angle, x, y, z )
m = m:translate( x, y, z )
m = m:scale( x, y, z )
print( m )
```

`vec4`

`vec3`

vec4 is new. vec3 now supports most common operations that vec2 supports.

**View Control**

```
perspective()
perspective( fov, aspect, zNear, zFar )
```

This sets the projection matrix to the perspective projection defined by the given parameters. If called with no parameters it defaults to fov=45 degrees, aspect=WIDTH/HEIGHT, zNear=0.1, zFar=(HEIGHT/2) / tan( pi * 60 / 360 ) * 10.

```
ortho()
ortho( left, right, bottom, top, near, far )
```

This sets the projection matrix to the orthographic projection defined by the given parameters. If called with no parameters it defaults to ortho( 0, WIDTH, 0, HEIGHT, -10, 10 )

```
camera()
camera( eyeX, eyeY, eyeZ, centerX, centerY, centerZ, upX, upY, upZ )
```

This sets up the view matrix to emulate a camera positioned *eye* and pointing at *center*, with an up-vector defined by *up*. Called without parameters it defaults to camera( 0, 0, -10, 0, 0, 0, 0, 1, 0 )