<p>Another way to formulate an Isometric projection is with the matrix:</p>
<p><span class="math-container">$
  \left[ {\begin{array}{cc}
    cos(\phi) &amp; sin(\phi)sin(\theta) &amp; 0 &amp; 0 \\
    0 &amp; cos(\theta) &amp; 0 &amp;0 \\
    sin(\phi) &amp; -cos(\phi)sin(\theta) &amp; 0 &amp; 0 \\
    0 &amp; 0 &amp; 0 &amp; 1 \\
  \end{array} } \right]
$</span></p>
<p>Where <span class="math-container">$\phi$</span> and <span class="math-container">$\theta$</span> are the two rotational angles.</p>
<p>Note that the 3rd column is all zero's indicating the plane of projection.</p>

CC BY-SA 4.0
2022-06-29T10:47:30.450Z
2022-06-29T10:47:30.450Z
pmw1234
<p>The projection matrix tells us how to draw an image. But how does it tell us this? Well it tells us what the original vectors are like when drawn on screen. The axonometric projections have fixed direction vectors, isometric is just one of them.</p>
<p>Now there is a entirely visually verifiable correlation between the matrix and the axes of your axonometric projection. You can offcourse also do this with rotations as others have suggested but its a very nonstraightforward way to achieve something you should be able to do by drawing the axes on a 2d surface.</p>
<p>Now lets take the standard 120 forward facing isometric axes with z up <em>(offcourse any coordinate could be flitted and you could have Y up as well just change sign or swap rows in matrix. Covnention random happens to be this since I was doing architectural stuff last and architects like z up since they draw in the X-Y plane. Had i worked with machanical engineers it would be Y up)</em>:</p>
<p><a href="https://i.sstatic.net/ypJnS.png" rel="nofollow noreferrer"><img src="https://i.sstatic.net/ypJnS.png" alt="enter image description here" /></a></p>
<p>Each basis vector is just a row in the matrix. From this follows that in your camera matrix is of form:</p>
<p><span class="math-container">$
  \left[ {\begin{array}{cc}
    cos(30°) &amp; -sin(30°) &amp; z_x &amp; 0 \\
    -cos(30°) &amp; -sin(30°) &amp; z_y &amp; 0 \\
    0 &amp; 1 &amp; z_z &amp; 0 \\
    c_x &amp; c_y &amp; c_z &amp; 1 \\
  \end{array} } \right] = 
  \left[ {\begin{array}{cc}
    \sqrt{3}/2  &amp; -1/2 &amp; z_x &amp; 0 \\
    -\sqrt{3}/2 &amp; -1/2 &amp; z_y &amp; 0 \\
    0 &amp; 1 &amp; z_z &amp; 0 \\
    c_x &amp; c_y &amp; c_z &amp; 1 \\
  \end{array} } \right]
$</span></p>
<p>So the last column is 0 because it does not participate in a perspective. The variables <span class="math-container">$c$</span> represent the offset for your center. Then you may also want to multiply all the x y z components with a multiplier to fit your screen drawing coordinates, but that depends on your imaging system.</p>
<p>What about <span class="math-container">$z$</span>? Well you want z values to be affected by your ground plane distance somehow. Now you could decompose all this to rotations to get a natural z value. Or you can just put in a value  in <span class="math-container">$z_x$</span> and <span class="math-container">$z_y$</span> and see what happens its probably not all that important as long as your geometry does not clip by near and far planes.</p>
<p>Similarly since the vectors are just what you see you can make any axonometric projection by drawing your axes and feeding their 2d coordinates into your matrix.</p>
<p>NOTE: The matrix may be transposed depending on how your system calculation order works.</p>

CC BY-SA 4.0
2022-11-26T18:49:26.833Z
2022-11-26T18:55:15.143Z
2022-11-26T18:55:15.143Z
joojaa
<p>I found that the easiest way is to just use a Transformation Matrix like:
<a href="https://i.sstatic.net/RUKXE.png" rel="nofollow noreferrer"><img src="https://i.sstatic.net/RUKXE.png" alt="This bad boi" /></a></p>
<p>And just adjust the Rz(a) to 45º and Rx(g) to 35.264º</p>
<p>Or if -z to Rz(a) to -45º and Rx(g) to 215.264º</p>

CC BY-SA 4.0
2022-06-29T11:10:23.097Z
This is not an axonometric projection.
pmw1234
CC BY-SA 4.0
2022-06-29T11:29:45.633Z
It looks like you are adding a transformation matrix with the desired roll in the standard MVP (model view projection), an Isometric projection *replaces* the perspective projection shown in the original question.
pmw1234
CC BY-SA 4.0
2022-06-29T21:41:51.963Z
@pmw1234 can you elaborate further? As I understand your answer is the projection matrix?
MiguelP
CC BY-SA 4.0
2022-07-01T17:29:54.413Z
Your original question posted a perspective projection matrix. An isometric projection would replace that matrix, and it would be in the form posted in my answer.  The matrix you posted is a transformation matrix that composes 3 rotations. A projection reduces the number of dimensions so I would expect 1 column of the matrix to be all zero's.
pmw1234
CC BY-SA 4.0
2022-07-06T08:49:26.983Z
projection matrices do not reduce the number of dimensions. The depth is preserved (in non-linear form) for use in z-buffering.
PeteBlackerThe3rd
CC BY-SA 4.0
2023-08-23T21:02:35.873Z
This statement is a gross twisting of what the use of a projection matrix is in the VAST majority of 3D graphics because the primary use of projection matrices in 3D graphics is to convert from 3D world space to 2D screen space. The primary tool for that is the projection matrix.
pmw1234
CC BY-SA 4.0
2022-06-29T10:57:59.593Z
2022-06-29T10:57:59.593Z
MiguelP
<p>I'm doing my own engine in college to display a wireframe on screen with an isometric projection but I literally can't find any literature about maths behind doing it by hand just for game engines which I'm not allowed to use.</p>
<p>So how can I get implement an isometric projection by hand?</p>
<p>my projection matrix (row-major):
<a href="https://i.sstatic.net/L3n8M.png" rel="nofollow noreferrer"><img src="https://i.sstatic.net/L3n8M.png" alt="Row-major" /></a></p>

CC BY-SA 4.0
2022-06-28T13:45:45.160Z
What about the "Mathematics" section in [the Wikipedia article](https://en.wikipedia.org/wiki/Isometric_projection#:~:text=Isometric%20projection%20is%20a%20method,of%20them%20is%20120%20degrees.)?
wychmaster
CC BY-SA 4.0
2022-06-28T14:11:18.293Z
I tried that and it didn't work at all with my projection matrix
MiguelP
<mathematics><projections><matrix><camera-matrix>
What projection matrix and world transformation do I need to have an isometric projection?
MiguelP
# What projection matrix and world transformation do I need to have an isometric projection?

(Asked by: username_0 on 2022-06-28)

I'm doing my own engine in college to display a wireframe on screen with an isometric projection but I literally can't find any literature about maths behind doing it by hand just for game engines which I'm not allowed to use.

So how can I get implement an isometric projection by hand?

my projection matrix (row-major):
[![Row-major](https://i.sstatic.net/L3n8M.png)](https://i.sstatic.net/L3n8M.png)

**Tags:** mathematics, projections, matrix, camera-matrix

> **Comments:**
> **username_1**: What about the "Mathematics" section in [the Wikipedia article](https://en.wikipedia.org/wiki/Isometric_projection#:~:text=Isometric%20projection%20is%20a%20method,of%20them%20is%20120%20degrees.)?  
> **username_0**: I tried that and it didn't work at all with my projection matrix  

---

## 3 answers

### Answer by username_2 on 2022-06-29. Score: 0

Another way to formulate an Isometric projection is with the matrix:

$
\left[ {\begin{array}{cc}
cos(\phi) & sin(\phi)sin(\theta) & 0 & 0 \\
0 & cos(\theta) & 0 &0 \\
sin(\phi) & -cos(\phi)sin(\theta) & 0 & 0 \\
0 & 0 & 0 & 1 \\
\end{array} } \right]
$

Where $\phi$ and $\theta$ are the two rotational angles.

Note that the 3rd column is all zero's indicating the plane of projection.


---

### Answer by username_3 on 2022-11-26. Score: 0

The projection matrix tells us how to draw an image. But how does it tell us this? Well it tells us what the original vectors are like when drawn on screen. The axonometric projections have fixed direction vectors, isometric is just one of them.

Now there is a entirely visually verifiable correlation between the matrix and the axes of your axonometric projection. You can offcourse also do this with rotations as others have suggested but its a very nonstraightforward way to achieve something you should be able to do by drawing the axes on a 2d surface.

Now lets take the standard 120 forward facing isometric axes with z up *(offcourse any coordinate could be flitted and you could have Y up as well just change sign or swap rows in matrix. Covnention random happens to be this since I was doing architectural stuff last and architects like z up since they draw in the X-Y plane. Had i worked with machanical engineers it would be Y up)*:

[![enter image description here](https://i.sstatic.net/ypJnS.png)](https://i.sstatic.net/ypJnS.png)

Each basis vector is just a row in the matrix. From this follows that in your camera matrix is of form:

$
\left[ {\begin{array}{cc}
cos(30°) & -sin(30°) & z\_x & 0 \\
-cos(30°) & -sin(30°) & z\_y & 0 \\
0 & 1 & z\_z & 0 \\
c\_x & c\_y & c\_z & 1 \\
\end{array} } \right] =
\left[ {\begin{array}{cc}
\sqrt{3}/2 & -1/2 & z\_x & 0 \\
-\sqrt{3}/2 & -1/2 & z\_y & 0 \\
0 & 1 & z\_z & 0 \\
c\_x & c\_y & c\_z & 1 \\
\end{array} } \right]
$

So the last column is 0 because it does not participate in a perspective. The variables $c$ represent the offset for your center. Then you may also want to multiply all the x y z components with a multiplier to fit your screen drawing coordinates, but that depends on your imaging system.

What about $z$? Well you want z values to be affected by your ground plane distance somehow. Now you could decompose all this to rotations to get a natural z value. Or you can just put in a value in $z\_x$ and $z\_y$ and see what happens its probably not all that important as long as your geometry does not clip by near and far planes.

Similarly since the vectors are just what you see you can make any axonometric projection by drawing your axes and feeding their 2d coordinates into your matrix.

NOTE: The matrix may be transposed depending on how your system calculation order works.


---

### Answer by username_0 on 2022-06-29. Score: -2

I found that the easiest way is to just use a Transformation Matrix like:
[![This bad boi](https://i.sstatic.net/RUKXE.png)](https://i.sstatic.net/RUKXE.png)

And just adjust the Rz(a) to 45º and Rx(g) to 35.264º

Or if -z to Rz(a) to -45º and Rx(g) to 215.264º

> **Comments:**
> **username_2**: This is not an axonometric projection.  
> **username_2**: It looks like you are adding a transformation matrix with the desired roll in the standard MVP (model view projection), an Isometric projection *replaces* the perspective projection shown in the original question.  
> **username_0**: @username_2 can you elaborate further? As I understand your answer is the projection matrix?  
> **username_2**: Your original question posted a perspective projection matrix. An isometric projection would replace that matrix, and it would be in the form posted in my answer.  The matrix you posted is a transformation matrix that composes 3 rotations. A projection reduces the number of dimensions so I would expect 1 column of the matrix to be all zero's.  
> **username_4**: projection matrices do not reduce the number of dimensions. The depth is preserved (in non-linear form) for use in z-buffering.  
> **username_2**: This statement is a gross twisting of what the use of a projection matrix is in the VAST majority of 3D graphics because the primary use of projection matrices in 3D graphics is to convert from 3D world space to 2D screen space. The primary tool for that is the projection matrix.  

---

