1 co1301 - games concepts week 20 matrices continued gareth bellaby
TRANSCRIPT
![Page 1: 1 CO1301 - Games Concepts Week 20 Matrices continued Gareth Bellaby](https://reader033.vdocuments.net/reader033/viewer/2022051315/56649eb55503460f94bbdf23/html5/thumbnails/1.jpg)
1
CO1301 - Games ConceptsWeek 20
Matrices continued
CO1301 - Games ConceptsWeek 20
Matrices continued
Gareth BellabyGareth Bellaby
![Page 2: 1 CO1301 - Games Concepts Week 20 Matrices continued Gareth Bellaby](https://reader033.vdocuments.net/reader033/viewer/2022051315/56649eb55503460f94bbdf23/html5/thumbnails/2.jpg)
2
TopicsTopics
1. Matrices continued
2. Efficiency
3. Numbers
![Page 3: 1 CO1301 - Games Concepts Week 20 Matrices continued Gareth Bellaby](https://reader033.vdocuments.net/reader033/viewer/2022051315/56649eb55503460f94bbdf23/html5/thumbnails/3.jpg)
3
Topic 1Topic 1
Matrices continued
![Page 4: 1 CO1301 - Games Concepts Week 20 Matrices continued Gareth Bellaby](https://reader033.vdocuments.net/reader033/viewer/2022051315/56649eb55503460f94bbdf23/html5/thumbnails/4.jpg)
4
MatricesMatrices
●A model has an associated 4 x 4 matrix.
1
0
0
0
zyx
zyx
zyx
zyx
PPP
zzz
yyy
xxxx-axis
y-axis
z-axis
position
![Page 5: 1 CO1301 - Games Concepts Week 20 Matrices continued Gareth Bellaby](https://reader033.vdocuments.net/reader033/viewer/2022051315/56649eb55503460f94bbdf23/html5/thumbnails/5.jpg)
5
3D Models in graphics3D Models in graphics
●Recorded as a 4x4 matrix.
1
0
0
0
zyx
zyx
zyx
zyx
PPP
zzz
yyy
xxxx-axis
y-axis
z-axis
position
![Page 6: 1 CO1301 - Games Concepts Week 20 Matrices continued Gareth Bellaby](https://reader033.vdocuments.net/reader033/viewer/2022051315/56649eb55503460f94bbdf23/html5/thumbnails/6.jpg)
6
MatricesMatrices
●A matrix is a rectangular table of numbers.
●A matrix is composed of rows and columns.
● In C++
float matrix[4][4] =
{ { 0.2, 0.4, 0.1, 0 },
{ 1, 1, 1, 0 },
{ 0.3, 0.3, 0.3, 0 },
{ 10, 3, 7, 1 } };
![Page 7: 1 CO1301 - Games Concepts Week 20 Matrices continued Gareth Bellaby](https://reader033.vdocuments.net/reader033/viewer/2022051315/56649eb55503460f94bbdf23/html5/thumbnails/7.jpg)
7
Matrix maths reminderMatrix maths reminder
●Size is expressed as rrows by columns.
●Matrix addition.
●Scalar multiplication.
●Matrix multiplication.
![Page 8: 1 CO1301 - Games Concepts Week 20 Matrices continued Gareth Bellaby](https://reader033.vdocuments.net/reader033/viewer/2022051315/56649eb55503460f94bbdf23/html5/thumbnails/8.jpg)
8
Scalar multiplicationScalar multiplication
●Scalar multiplication is simply when each component of a matrix is multiplied by a single value, in effect scaling it.
46
22
23
112
31261423
![Page 9: 1 CO1301 - Games Concepts Week 20 Matrices continued Gareth Bellaby](https://reader033.vdocuments.net/reader033/viewer/2022051315/56649eb55503460f94bbdf23/html5/thumbnails/9.jpg)
9
Matrix MultiplicationMatrix Multiplication
The location of the result in the new matrix is the position where the row and the column intersect.
![Page 10: 1 CO1301 - Games Concepts Week 20 Matrices continued Gareth Bellaby](https://reader033.vdocuments.net/reader033/viewer/2022051315/56649eb55503460f94bbdf23/html5/thumbnails/10.jpg)
10
TransposeTranspose
● The transpose of a matrix simply interchanges the rows and the columns of the matrix.
● It is important because vectors in graphics can be ordered by rows (DirectX) or columns (OpenGL and HLSL).
● Represented by a superscript T. The transpose of matrix A is AT.
161
032
10
63
12●So a n x m
matrix becomes an n x m matrix.
![Page 11: 1 CO1301 - Games Concepts Week 20 Matrices continued Gareth Bellaby](https://reader033.vdocuments.net/reader033/viewer/2022051315/56649eb55503460f94bbdf23/html5/thumbnails/11.jpg)
11
The Identity MatrixThe Identity Matrix● The identity matrix is a special matrix. The identity matrix is a square matrix that has zeros for all elements expect
along the main diagonal.
● Multiplying a matrix by the identity matrix leaves the matrix unchanged.
● For example used as a starting point before additional operations are added to a matrix.
10
01
100
010
001
1000
0100
0010
0001
![Page 12: 1 CO1301 - Games Concepts Week 20 Matrices continued Gareth Bellaby](https://reader033.vdocuments.net/reader033/viewer/2022051315/56649eb55503460f94bbdf23/html5/thumbnails/12.jpg)
12
VectorsVectors●A matrix can have just one column or just one
row.
●A row or column matrix can be used to represent a vector.
ZYX
2.05.01.0 2.0,5.0,1.0
vector is: row matrix is:
●DirectX uses row vectors (OpenGL uses column vectors).
![Page 13: 1 CO1301 - Games Concepts Week 20 Matrices continued Gareth Bellaby](https://reader033.vdocuments.net/reader033/viewer/2022051315/56649eb55503460f94bbdf23/html5/thumbnails/13.jpg)
13
Transforming a VectorTransforming a Vector
● If you multiply a row matrix by a 3x3 matrix, the result is another row matrix.
●The 3x3 matrix therefore acts to transform the row matrix.
●However, a 3x3 matrix can only produce some of the transformations required in 3D graphics.
●So another component is added at the end to produce a row matrix with a length of 4. The transformation matrix now be a 4x4 matrix.
![Page 14: 1 CO1301 - Games Concepts Week 20 Matrices continued Gareth Bellaby](https://reader033.vdocuments.net/reader033/viewer/2022051315/56649eb55503460f94bbdf23/html5/thumbnails/14.jpg)
14
Rotation using a matrixRotation using a matrix
●Matrix multiplication is used to perform rotations.
●Well start with Euler rotation. In year 3 you'll look at a faster alternative.
●Euler is pronounced "oiler".
1
1000
0100
00cossin
00sincos
1 zyxzyx
![Page 15: 1 CO1301 - Games Concepts Week 20 Matrices continued Gareth Bellaby](https://reader033.vdocuments.net/reader033/viewer/2022051315/56649eb55503460f94bbdf23/html5/thumbnails/15.jpg)
15
Rotation using a matrixRotation using a matrix
1000
0100
00cossin
00sincos
1000
0cos0sin
0010
0sin0cos
1000
0cossin0
0sincos0
0001
RotateZ
RotateYRotateX
![Page 16: 1 CO1301 - Games Concepts Week 20 Matrices continued Gareth Bellaby](https://reader033.vdocuments.net/reader033/viewer/2022051315/56649eb55503460f94bbdf23/html5/thumbnails/16.jpg)
16
Topic 2Topic 2
Efficiency
![Page 17: 1 CO1301 - Games Concepts Week 20 Matrices continued Gareth Bellaby](https://reader033.vdocuments.net/reader033/viewer/2022051315/56649eb55503460f94bbdf23/html5/thumbnails/17.jpg)
17
EfficiencyEfficiency
●Last week I talked about the need for efficiency. The time available to perform operations within a computer game is small (0.017 to 0.033 seconds per frame) and so efficiency is a dominant concern within games programming.
● If you have 10,000 trees. You need to perform collision detection for all of the trees. That's a lot of processing.
![Page 18: 1 CO1301 - Games Concepts Week 20 Matrices continued Gareth Bellaby](https://reader033.vdocuments.net/reader033/viewer/2022051315/56649eb55503460f94bbdf23/html5/thumbnails/18.jpg)
18
Tree collisionTree collision
Collision is currently being implemented as:
occured. hascollision athen
tree, theof radius distance If
distance 222
zyx
●What could be done in order to reduce the computational cost?
![Page 19: 1 CO1301 - Games Concepts Week 20 Matrices continued Gareth Bellaby](https://reader033.vdocuments.net/reader033/viewer/2022051315/56649eb55503460f94bbdf23/html5/thumbnails/19.jpg)
19
Improving efficiencyImproving efficiency
●Firstly, can the collision detection be made more efficient?
●Examine the calculation. Collision detection depends upon a distance check. The most expensive element of the calculation is the square root. But it can be dispensed with:
2222
222
(distance)
distance
zyx
zyx
![Page 20: 1 CO1301 - Games Concepts Week 20 Matrices continued Gareth Bellaby](https://reader033.vdocuments.net/reader033/viewer/2022051315/56649eb55503460f94bbdf23/html5/thumbnails/20.jpg)
20
Improving efficiencyImproving efficiency
●Rewrite the check so that the square is no longer used.
●Square both sides of the equation.
●Perform the check against the square of the tree radius.
occured. hascollision athen
, tree) theof (radius (distance) If
(distance)
distance
22
2222
222
zyx
zyx
![Page 21: 1 CO1301 - Games Concepts Week 20 Matrices continued Gareth Bellaby](https://reader033.vdocuments.net/reader033/viewer/2022051315/56649eb55503460f94bbdf23/html5/thumbnails/21.jpg)
21
Improving efficiencyImproving efficiency
●The square of the radius can be pre-calculated so it costs nothing.
●A simple rewriting of the calculation has improved matters.
●The use of squares is common within graphics, e.g. for distance tests.
![Page 22: 1 CO1301 - Games Concepts Week 20 Matrices continued Gareth Bellaby](https://reader033.vdocuments.net/reader033/viewer/2022051315/56649eb55503460f94bbdf23/html5/thumbnails/22.jpg)
22
EfficiencyEfficiency
●Could anything else be done to improve efficiency?
●Does the program have to check all of the trees?
●Most of the trees are so far away that we can ignore them. It is possible to devise a method so that only likely candidates are checked.
![Page 23: 1 CO1301 - Games Concepts Week 20 Matrices continued Gareth Bellaby](https://reader033.vdocuments.net/reader033/viewer/2022051315/56649eb55503460f94bbdf23/html5/thumbnails/23.jpg)
23
Partitioning the worldPartitioning the world
●Grid out the world.
●Record the trees according to which grid they are in.
●Only check those trees which are in the same grid as the player.
●10 by 10 grid.
●Each grid has 100 trees within it.
![Page 24: 1 CO1301 - Games Concepts Week 20 Matrices continued Gareth Bellaby](https://reader033.vdocuments.net/reader033/viewer/2022051315/56649eb55503460f94bbdf23/html5/thumbnails/24.jpg)
24
Partitioning the worldPartitioning the world
●This example will use clear coordinates and scaling, but note that the principle holds true for all contexts. Each cell of the grid willl be 100 units by 100 units.
●Need an efficient way to derive the current grid of the player. Remember that integer devision within C++ produces an integer result and that the result is always rounded down. Divide the player coordinates (x and z) by 100. The result is the grid reference.
![Page 25: 1 CO1301 - Games Concepts Week 20 Matrices continued Gareth Bellaby](https://reader033.vdocuments.net/reader033/viewer/2022051315/56649eb55503460f94bbdf23/html5/thumbnails/25.jpg)
25
Deriviving the grid cellDeriviving the grid cell
●player location ( 40, 30 )
=> ( 40/100, 30/100 )
=> ( 0, 0 )
●player location ( 140, 130 )
=> ( 140/100, 130/100 )
=> ( 1, 1 )
●player location ( 450, 70 )
=> ( 450/100, 70/100 )
=> ( 4, 0 )
![Page 26: 1 CO1301 - Games Concepts Week 20 Matrices continued Gareth Bellaby](https://reader033.vdocuments.net/reader033/viewer/2022051315/56649eb55503460f94bbdf23/html5/thumbnails/26.jpg)
26
Spatial PartitioningSpatial Partitioning
● In programming terms you could create a 2D array which corresponds exactly to the grid coordinates. Each cell could then have the locations of its own trees stored.
●This is an simple example of a technique called "spatial partitioning", i.e. partitioning or sub-dividing space into chunks. Spatial partitioning is used extensively within computer games, e.g. in a game level so that only nearby models or visible models are rendered.
![Page 27: 1 CO1301 - Games Concepts Week 20 Matrices continued Gareth Bellaby](https://reader033.vdocuments.net/reader033/viewer/2022051315/56649eb55503460f94bbdf23/html5/thumbnails/27.jpg)
27
Spatial PartitioningSpatial Partitioning
●For example, it is possible to extend the grid approach to include a check to see whether the trees get rendered.
●There's a nice version of this later on in Frank Luna, Introduction to DirectX, in Chapter 18 when he uses a grid to filter out geometry that is not in view of the camera.
●More sophisticated techniques include Binary Space Partioning (BSP) trees and Oct-trees.