MA1 Report

Embed Size (px)

Citation preview

  • 8/14/2019 MA1 Report

    1/23

    Assignment 1 [Thomas Sampson, BSc 2 Games Software Development, 2Y]

    Assignment 1

    Module 5572: Mathematics for Modelling and Rendering

    Contents

    2D Image

    1. Obtaining the vertices

    2. Getting the vertices into excel

    3. Translation transformations

    4. Scaling transformations

    5. Shear transformations6. Rotation about the origin

    7. Rotation around an arbitrary point

    8. Reflection in the axis

    9. Reflection in an arbitrary line

    3D Image

    1. Obtaining the vertices

    2. Parallel Projection

    3. Perspective Projection4. Translation transformations

    5. Scaling Transformations

    6. Rotation around an axis

    7. Rotation around an arbitrary axis

    8. Reflection in the standard planes

    9. Reflection in an arbitrary plane

  • 8/14/2019 MA1 Report

    2/23

    Assignment 1 [Thomas Sampson, BSc 2 Games Software Development, 2Y]

    2D Image

    The following work in this section involves the creation and manipulation of a 2D

    image. I will use Microsoft Excel to display this 2D image, and any effects producedby applying transformation matrix to the points of the 2D image. I have taken

    screenshots at regular intervals to demonstrate the effects of different techniques

    (such as rotation, scaling etc) and have described how I achieved each

    transformation.

    1. Obtaining the vertices

    The first step of my work was to obtain the vertices (2D co-ordinates) of a 2D image.

    Last year, in a similar assignment I chose to use graph paper and a pencil to find the

    points of a simple shape. However, this year I decided to digitise this stage by using3ds Max. I mapped a the following jpeg image Figure 1 onto the x-y plane, then used

    the line tool to plot my co-ordinates

    Figure 1

    Note: - In this 2D example, all my pen points fall where z=0, hence there is no third dimension.

    Screenshots

    Here are some screenshots of me tracing the image of the car with the line tool.

  • 8/14/2019 MA1 Report

    3/23

    Assignment 1 [Thomas Sampson, BSc 2 Games Software Development, 2Y]

    2. Getting the vertices into Excel

    Now I had the vertices I needed for my drawing, I used 3ds max to export the model

    into a "Wavefront Object" See Figure 2 with the extension ".obj". This file type works

    particularly well as it saves all the vertices as plain text, from which it was easy to

    copy and paste them into excel. I did however have to be careful of splitting out the

    separate components of the car to achieve breaks in my graph.

    Figure 2 - Example of a Wavefront Object file

    The Result

    Here you can see the vertices imported

    into Excel. Each row shows a different

    component of the vehicle (body, window

    etc). Here I have expressed the vertices

    as columns and have added z=1 to the

    homogeneous co-ordinates (this is

    necessary when implementing the

    transformations)

    Here you can see the vertices mapped

    onto a simple line graph in Microsoft

    Excel. I have coloured the different

    components for aesthetic purposes.

  • 8/14/2019 MA1 Report

    4/23

    Assignment 1 [Thomas Sampson, BSc 2 Games Software Development, 2Y]

    3. Translation Transformations

    The first transformation I will perform on the co-ordinates is a simple transformation.

    For each example I plot the original co-ordinates on the graph (in pale grey) and the

    transformed co-ordinates onto the graph in red.

    As my 2D image is quite large, for the purpose of this demonstration I am applying a

    transformation of (30 ,60) using the following matrix.

    Note: - I am using the Derive application to screenshot any matrices from this point onwards.All matrix multiplications are achieved in Excel using theMMULT(array1, array2)function.

    The Result

    Here you can see translation matrix in

    excel and the parameters to the right (x

    and y translation amounts) along with

    some of the transformed vertices below.

    As you can see, the

    transformation was

    successful and had

    translated the car 30 units

    to the right and 60 units

    upwards,

  • 8/14/2019 MA1 Report

    5/23

    Assignment 1 [Thomas Sampson, BSc 2 Games Software Development, 2Y]

    4. Scaling Transformations

    The next transformation I will perform on the co-ordinates is a scaling transformation.

    To demonstrate scaling I have used the following matrix 2 matrices.

    a)

    b)

    The Result

    Here are the results the 2 scaling matrices have upon my image.

    a)

    b)

    This matrix will produce a stretch of 1.5 in the y direction.

    This matrix will produce a stretch of 0.5 in both the x and y

    direction.

  • 8/14/2019 MA1 Report

    6/23

    Assignment 1 [Thomas Sampson, BSc 2 Games Software Development, 2Y]

    5. Shear Transformations

    The next transformation I will perform on the co-ordinates is a shearing. Shearing

    deforms the shape and can be applied along both the x and y-axis, therefore my

    spreadsheet takes 2 parameters. I will use the following to matrices to apply shears

    to my image along each axis.

    a)

    b)

    The Result

    Here are the results the 2 shearing matrices have upon my image.

    a)

    b)

    This matrix will produce a shear of value 1 along the x-axis.

    This matrix will produce a shear of value 0.2 along the y axis.

  • 8/14/2019 MA1 Report

    7/23

    Assignment 1 [Thomas Sampson, BSc 2 Games Software Development, 2Y]

    6. Rotation about the origin

    The first rotation transformation I will demonstrate is rotation around the origin. This

    is the most simple of rotations and rotates vertices around the point (0,0). To achieve

    this we use the following standard matrix.

    Note: - In all cases of , represents the amount in degrees or radians you wish to rotate in

    an anti-clockwise direction. I will use radians in all my rotations as this unit is better supported

    by Excel.

    For the purpose of this demonstration I will rotate my shape by 45o or /4cACW

    (anti-clockwise), using the following matrix.

    Note: - I used the RADIANS() function in excel to convert my degrees parameter to radians as

    the COS() and SIN() function will only accept angles in this form

    The Result

    100

    0cossin

    0sincos

    100

    0/4)cos(/4)sin(

    0/4)sin(/4)cos(

  • 8/14/2019 MA1 Report

    8/23

    Assignment 1 [Thomas Sampson, BSc 2 Games Software Development, 2Y]

    7. Rotation about an arbitrary point

    The next rotation is slightly more advanced as it will rotate my object around an

    arbitrary point and is not limited to rotation only around the origin. There is no single

    matrix to achieve this effect so I will use a composition of 3 matrices to achieve the

    desired result. The first matrix translates the arbitrary point to the origin, the second

    matrix applies the rotation, and the third matrix translates back to the arbitrary point.

    Example 1

    My first example will rotate the car 45o or /4c CW (clockwise) around the point of the

    back tyre, approximately (255,45). To do this I will multiply the following 3 matrices.

    As we are working with column vectors, the order of which the matrices get applied

    to the object vertices is right to left (hence why these seem to be in the reverse

    order to my previous description).

    Example 1 Result

    100

    4510

    25501

    100

    0/4)cos(/4)sin(

    0/4)sin(/4)cos(

    100

    4510

    25501

  • 8/14/2019 MA1 Report

    9/23

    Assignment 1 [Thomas Sampson, BSc 2 Games Software Development, 2Y]

    7. Rotation about an arbitrary point continued.

    Example 2

    To demonstrate moving the arbitrary point my second example works in the same

    way as example 1 but this time rotates the car 90o

    or /2c

    ACW (anti-clockwise)around the front tyre, approximately point (90,45), using the following matrices.

    Example 2 Result

    100

    4510

    9001

    100

    0/2)cos(/2)sin(

    0/2)sin(/2)cos(

    100

    4510

    9001

  • 8/14/2019 MA1 Report

    10/23

    Assignment 1 [Thomas Sampson, BSc 2 Games Software Development, 2Y]

    8. Reflection in the axis

    Vertices can be reflected in both the x and y-axis, and as with rotation, standard

    matrices exist for these transformations. The following matrices produce reflections

    in each axis.

    The Result

    Here are the results the two reflection matrices have upon my drawing

    This matrix on the left produces a reflection in

    the x-axis, and the matrix on the right

    produces a reflection in the y axis.

    Here is the

    reflection in

    the x-axis

    Here is the

    reflection in

    the y axis

  • 8/14/2019 MA1 Report

    11/23

    Assignment 1 [Thomas Sampson, BSc 2 Games Software Development, 2Y]

    9. Reflection in an arbitrary line

    Reflection in an arbitrary line is more sophisticated than a rotation in the axis. As

    there could be an infinite number of arbitrary lines, there is no standard formula for

    achieving reflection these lines. Instead, the way reflection in a line is achieved, is to

    bring that line down to meet an axis. Once this has been completed we can then

    reflect in the axis and move the line back to its original position. For the purpose of

    this example I will define a line by using two points, a and b (although lines could be

    expressed in other forms such as Cartesian or parametric).

    Example Line

    a) (1, 3)

    b) (4, 7)

    Step 1

    The first step is to bring the line down the origin using a translation. In this case we

    can translate the line down by [-1,-3] so that it lies on the point (0, 0), using the

    following matrix.

    Step 2

    Next we need to work out the angle which the line makes with the x-axis (we could

    work with the y-axis but both methods work just as well). To find this angle we take

    our transformed co-ordinates which are now (0, 0) and (3, 4), and use them to form a

    triangle as follows.

    Now we can calculate the angle using simple trigonometry, so

    =Tan-1(4/3)

    =53o or =0.927c

    3

    4

  • 8/14/2019 MA1 Report

    12/23

    Assignment 1 [Thomas Sampson, BSc 2 Games Software Development, 2Y]

    Step 2 Continued

    The angle calculated can now be used in the following matrix to rotate the line to

    align it with the x-axis. Notice the angle is negative as we wish to achieve a CW

    rotation.

    Step 3

    Now we have our line aligned with the x-axis we can do a simple x-axis reflection as

    seen before using the following matrix..

    Step 4 & 5

    Once the reflection has taken place we can now rotate and translate back to the

    original angle and position, using the opposite matrices used in steps 1 and 2.

    All together now

    Here is the final set of matrices to achieve a reflection in the arbitrary line given. As

    we are using column vectors the matrices are applied to the points from right to left.

    100

    0-0.927)cos(-0.927)sin(

    00.927)sin(0.927)cos(

    100

    00.927)cos(0.927)sin(

    00.927)sin(0.927)cos(

    To rotate back into position To move backinto position

    100

    00.927)cos(0.927)sin(

    00.927)sin(0.927)cos(

    100

    0-0.927)cos(-0.927)sin(

    00.927)sin(0.927)cos(

  • 8/14/2019 MA1 Report

    13/23

    Assignment 1 [Thomas Sampson, BSc 2 Games Software Development, 2Y]

    The Result

    Here is the result of a few reflections in arbitrary lines. Again these screenshots are

    taken from graphs in Microsoft Excel.

  • 8/14/2019 MA1 Report

    14/23

    Assignment 1 [Thomas Sampson, BSc 2 Games Software Development, 2Y]

    3D Image

    The following work in this section involves the creation and manipulation of a 3D

    image. Again I will use Microsoft Excel to display this 3D image, and any effects

    produced by applying transformation matrix to the points of the 2D image.

    1. Obtaining the vertices

    For my 3D drawing I decided to obtain my using pen, paper and a calculator, rather

    than a 3D software package. The reason for doing so is that the export / import

    process is quite time consuming and would be even more so when using 3D vertices.

    My drawing is of a windmill consisting of a base, top, fans and a door. I used

    Microsoft Paint as evidence of my calculations. See Figure 1

    Figure 1

    The Result

    Here you can see the vertices

    imported into Excel.

    Here you can see the vertices mapped onto a simple

    line graph in Microsoft Excel shown in a 2 point

    perspective projection. I have coloured the different

    components for aesthetic purposes.

  • 8/14/2019 MA1 Report

    15/23

    Assignment 1 [Thomas Sampson, BSc 2 Games Software Development, 2Y]

    2. Parallel Projection

    The first method of projection I will demonstrate is parallel projection. Here are some

    screenshots of parallel projections, along with the matrices used to achieve them.

    Orthographic

    Isometric

    Orthographic projection allows us to see the

    image from the plane z=0 using the matrix below.

    Isometric projection as shown to the left is

    achieved in three steps. We first rotate around

    the vertical axis (y) by 45oand then rotate

    around the horizontal axis by 35.264. This is

    then followed by an orthographic projection in

    the plane z=0 (see matrices at bottom of page).

    Note: - Angles are shown in radians.

  • 8/14/2019 MA1 Report

    16/23

    Assignment 1 [Thomas Sampson, BSc 2 Games Software Development, 2Y]

    3. Perspective Projection

    The next method of projection I will demonstrate is perspective projection. I will

    demonstrate one, two and three point perspective projections and show the matrices

    used to achieve them.

    One-point perspective

    To achieve one-point perspective projections we first have to translate the points

    before applying a one-point perspective projection matrix. In this example I will

    translate my points by (10, 10, 0) before applying the projection matrix. The

    projection matrix takes the parameter d which I will assign the value 50 for the sake

    of this example. Here are the matrices which when multiplied, give a one-point

    perspective projection. I have included a screenshot to show the outcome.

    Here we can see that a one-point

    perspective projection can look

    distorted. A projection of this kind

    produces only one vanishing point in

    the z direction, with all other linesparallel with either the x or y axis.

  • 8/14/2019 MA1 Report

    17/23

    Assignment 1 [Thomas Sampson, BSc 2 Games Software Development, 2Y]

    Two-point perspective

    To achieve two-point perspective projections we have to both translate androtate

    the points about the y-axis before applying the projection matrix. For the purpose of

    this example I will translate my points by (30,-10,0) and then rotate 160o around the

    y-axis before applying the projection matrix which will receive the parameter of dwith

    a value 200. This will be achieved by multiplying the following three matrices (which

    will be applied to my points from right to left).

    Three-point perspective

    Finally I will demonstrate a three-point perspective projection. To achieve this

    projection we add another step to those used in previous perspective projections. As

    before we translate the image and rotate around the y-axis, but this time we add an

    extra rotation about the x-axis before applying the final projection matrix. For this

    example I will translate by (10.10.20), rotate 160o around the y-axis, and 10o around

    the x-axis before projection, using the following matrices (applied from right to left).

    As you can see, a two-point

    perspective projection is a lot more

    convincing than a one-point

    perspective projection, and provides

    us with two vanishing points rather

    than one. Here only the vertical lines

    are parallel (with the y axis).

  • 8/14/2019 MA1 Report

    18/23

    Assignment 1 [Thomas Sampson, BSc 2 Games Software Development, 2Y]

    Three-point perspective continued...

    4. Translation transformations

    Translation in 3D works very much the same was as in 2D but this time allows us to

    translate in the z-axis in addition to the x and y-axis. Below is the standard 3D

    translation matrix where a b and c are replaced with the amount you wish to translatein x y and z axis respectively.

    Here I have applied the three point

    perspective. It is difficult to see this

    properly with my building as there are

    not many vertical lines, but where

    there are (such as on the roof, and

    the side fans) you can see that they

    all point to a vanishing point

    somewhere beneath the image. This

    projection of course provides us with

    three vanishing points.

    This is an example of a

    translation of (20,10,10).

    Note: - From here on I will be

    using a two-point perspective

    to show my 3D model being

    translated, rotated and

    reflected. This means that the

    projection will be the final

    step in each matrix

    multiplication chain,

    although I will not include

    this in my examples.

  • 8/14/2019 MA1 Report

    19/23

    Assignment 1 [Thomas Sampson, BSc 2 Games Software Development, 2Y]

    5. Scaling transformations

    As with translations we can now add a third dimension to our scaling matrix. We use

    the following standard matrix to achieve scaling in three dimensions. The letters a b

    and c are replaced with the amount to scale in the x y and z direction respectively.

    6. Rotation around the axis

    As with 2D axis rotation there are a set of standard matrices for rotating 3D pointsaround the axis, with a third matrix allowing us to rotate around the z axis. The three

    standard matrices are as follows and produce the following results...

    This is an example of scaling

    with a stretch of 1.5 in the xdirection, 0.5 in the y direction

    and 2 in the z direction.

    Rotation about the x-axis

    In this example x = 45o

    Rotation about the y-axis

    In this example x = 45o

    Rotation about the z-axis

    In this example x = 45o

  • 8/14/2019 MA1 Report

    20/23

    Assignment 1 [Thomas Sampson, BSc 2 Games Software Development, 2Y]

    7. Rotation around an arbitrary axis

    Next I will demonstrate how to rotate around an arbitrary axis. This will allow me to specify any two

    points, which will be joined to make an axis, then use the necessary transformations to rotate my

    vertices around this axis in 3D space.

    Step 1

    The first step is to take the two points which define the line, and translate them such that one of the

    points lies on the origin (0,0). If we define our points as (x1,y1,z1,x2,y2,z2) then we can use the

    following matrix to achieve a shift to the origin.

    Step 2

    The way in which the rotation works it to make our arbitrary line align perfectly with one of the 3 axis

    (for which we know standard rotation matrices) and carry out our rotation (followed by reversing the

    alignment steps). In this step I need to find the angle the arbitrary line makes with the z axis. To do

    this I take my line in component form ( x2i+y2j+z2k ) and the line of the z axis ( -k ) and find the dot

    product of the two. This will give me a result . I can now rotate around the y axis to ensure my

    arbitrary line lies on the y-z plane using the following matrix

    Step 3

    Now that my arbitrary line lies on the y-z plane a single rotation about the x axis will align my line

    perfectly along the y axis. To find the angle I need to rotate around the x-axis I will take my new line

    (after the previous matrix has been carried out) and the y axis ( j ) and find the dot product. This will

    give me a result . I can now rotate about the x axis using the following matrix

    Step 4

    Step 4 is to actually carry out the rotation I wish to achieve ( around the y axis as my line is now

    aligned perfectly ). To do this I use the following matrix

  • 8/14/2019 MA1 Report

    21/23

    Assignment 1 [Thomas Sampson, BSc 2 Games Software Development, 2Y]

    Steps 5 6 & 7

    Now that the rotation has taken place all that is left to do is revers the previous alignment process by

    rotating and translating my arbitrary line back to where it started. This can be achieved by applying

    the following three matrices (multiplied from right to left)

    The Result

    Here are some screenshots of rotations of 45o

    around arbitrary lines.

    8. Reflection in the standard planes

    As with rotation around the axis, reflection in axis planes is produced using a standard set of

    matrices, one for each plane. The three standard matrices are as follows and produce the

    following results...

    Reflection in the xy-plane Reflection in the xz-plane Reflection in the yz-plane

  • 8/14/2019 MA1 Report

    22/23

    Assignment 1 [Thomas Sampson, BSc 2 Games Software Development, 2Y]

    9. Reflection in an arbitrary plane

    The final transformation in my report is a reflection in an arbitrary plane. There are different

    ways of defining a plane, but for my example I will specify my plane in component form,

    specifying the distance of the plane from the origin (a+b+c), and specifying two lines which

    lay on the plane.

    Example plane

    a+b+c + x1+y1+z1 + x2+y2+z2

    Step 1

    The system used to reflect in an arbitrary plane is quite similar to the system used to

    rotate around an arbitrary line. Again, we begin by translating the plane to the origin.

    This translation is easy to calculate as we simply reverse the effects of a b and c

    using the following matrix.

    Step 2

    The second step is to find the normal to the plane. This allows us to determine which

    way the plane is pointing/facing. To find the normal to any plane we take the cross

    product of any two non-parallellines on that plane. In this case we can use the twolines specified by the plane (x1+y1+z1 and x2+y2+z2). This calculation will give us the

    equation of the normal, in the form

    nx+ny+nz

    Step 3

    Similarly to the rotation around an arbitrary line, we now need to align the normal

    perfectly on an axis as doing so will allow us to reflect in a standard plane. Making

    the y component of the normal 0 allows us to find the angle which the normalmakes with the z axis by finding the dot product. We can then rotate around the y

    axis to bring the normal onto the y-z plane using the following matrix.

  • 8/14/2019 MA1 Report

    23/23