# 3D Fundamentals Tutorial 2

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

In this video we lay the groundwork needed to represent and transform positions and 3D space, we define the relationship between our 3D space and the screen coordinates, and we setup a data structure to hold our test cube geometry.

## Video

The tutorial video is on YouTube here.

• Fix an error in `Mat2.h` (multiplication of vectors with matrices) 0:16
• Introducing 3D space 1:57
• Implementing the `Vec3` class 3:19
• Inherits from `Vec2` (z-component added)
• Overload all operators for 3D
• Advantage of inheritence here: enables passing `Vec3`s into functions that accept `Vecc2&` references
• Calculating the length of a 3D vector (i.e., in R3) 4:57
• The `Mat3` 3D Matrix class 5:57
• Choosing a coordinate system 7:37
• We choose a Left Handed coordinate system
• And start with defining World Space (=object space for now) and Screen Space
• Setting up a World Space (Chili likes to call it Pube Space) 10:08
• We set the Origin (0,0,0) of world space in the middle of the screen
- This makes for better (easier) scaling
• We will use NDC (Normalized Device Coordinates)
- Meaning: we don't use pixel values, but normalized values relative to screen size
- (e.g. x=1.0 means far right end of screen, x=-1.0 for far left end of screen
- Main advantage: become independent from screen size
- Note: Direct 3D and OpenGL use NDC
• We will use the Pre-Clip 3D space definition: z=1.0 indicates half cube depth
• Transforming vertices from Pube Space to Screen Space 14:01
• Introducing the `PubeScreenTransformer` class
• Testing: drawing a cube 17:07
• `Cube` class created as a data structure to hold the vertices
• Representing lines: vertex container + vector of indices 18:34
• This strategy avoids having to transform vertices multiple times
• Same concept as IndexBuffer used in Direct3D to draw primitives 20:40
• Make the `Cube` class return a `IndexedLineList` struct
• Code for drawing: transform the vertices and iterate through the index buffer 21:50
• Limitations observed: not square and not 3D. Why? 23:22
• Screen size is not square, we'll use a quick fix for now
• We still lack 3D visual cues because we don't account for the z-component yet (we're still in Orthographic Projection)