# Projection matrix confusion

This topic is 2022 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

## Recommended Posts

Hello.

I have been studying the concept of projection matrix and I found something missing from it.

The projection matrix is supposed to move points into projection space which is enclosed in -1,1 centered at 0,0,0.

The column matrix of projection looks like this

S , 0 , 0 , 0

0 , S , 0 , 0

0 , 0 , Q , 1

0 , 0 , -Zn*Q , 0

It is supposed to transform points from large space of arbitrary world size into -1,1 space, yet, S is a constant and can be precisely 1 for certain angle. It seems that wheather transponed or not, this matrix will not touch the values of x and y, but the x and y are promissed to be in scale of -1,1. How come? This matrix will not translate large points's x and y into -1 , 1. Does projection matrix realy move points into projection space, or additional computaion on vector x and y is neccesary to have them -1,1 spaced? Thanks for clarification.

##### Share on other sites
You cannot use a matrix to project onto a box like that.
A projection matrix projects onto a linear subspace e.g. a plane.

edit: You should probably ignore this answer ... Edited by Inferiarum

##### Share on other sites

The matrix itself does not transform the vertices into the unit cube. That happens at the perspective division stage when the W-component is normalized.

The element -Zn*Q at (4,3) will copy and scale the Z-component of the vertex into the W-component. When the W-component is normalized, the X, Y and Z-coordinates are effectively divided by -Zn*Q*Z. That's where the perspective effect and your missing scaling comes from.

Edited by Brother Bob

##### Share on other sites

Thanks.

But as it comes to my understanding, the operation (x/(z*w),y/(z*w),w) provides perspective "transformation". I wrote "transformation" because it seems that this operation cannot be written in a matrix. Does rasterizer read every vertex for its z value to provide upper given result?

(x,y,z,w) to (x/(z*w),y/(z*w),w).

Is there no way to put this last operation into a matrix? Even by some gruesome aditions constants? Orthogonal projection simply ommits z komponent, and just to get pespective deformation I need to do nonlinear computations? I thought that verticies are transformed all by the same final transformation up into screen 2d space, is it really not so?

##### Share on other sites

Thanks.

But as it comes to my understanding, the operation (x/(z*w),y/(z*w),w) provides perspective "transformation". I wrote "transformation" because it seems that this operation cannot be written in a matrix. Does rasterizer read every vertex for its z value to provide upper given result?

(x,y,z,w) to (x/(z*w),y/(z*w),w).

Read up on "perspective correct interpolation" to see how this non-linearity interacts with rasterization.

Is there no way to put this last operation into a matrix? Even by some gruesome aditions constants?

A matrix multiplication is a linear operation; the division is a non-linear operation. In other words: no, you cannot do the division with a matrix.

Orthogonal projection simply ommits z komponent, and just to get pespective deformation I need to do nonlinear computations? I thought that verticies are transformed all by the same final transformation up into screen 2d space, is it really not so?

What do you mean, that some vertices are transformed differently than others? Every vertex, no matter what transformations or types of projection you have, all go through the same set of operations.

##### Share on other sites

What do you mean, that some vertices are transformed differently than others? Every vertex, no matter what transformations or types of projection you have, all go through the same set of operations.

I ment that with projection effect, you cannot tranform the vertexes all by the same transformation, thanks to the /w*z operation, thus every vertex is transformed by a different transformation. If you use orthogonal projection,  every vertex is proccesed by the same common transformation to the final clip result.

##### Share on other sites

I don't see how the division treats vertices differently. All vertices are multiplied by the matrix, and all vertices have their components normalized by their W-component. The fact that the perspective happens to have a non-linear transformation changes nothing; the non-linear transformation is the same for all vertices, and if you have a projection matrix without perspective, then the non-linear function simplifies to a linear function.

The transformation is just a function y=f(x), where x and y are vectors and f is the transforming function. Without perspective, the function is linear and can be implemented as a matrix multiplication. With perspective, the function is non-linear because it requires a division, and thus cannot be implemented as a pure matrix multiplication. But in the end, the function f is the same for all vertices.

Edited by Brother Bob

1. 1
2. 2
Rutin
21
3. 3
A4L
15
4. 4
5. 5
khawk
14

• 13
• 26
• 10
• 11
• 44
• ### Forum Statistics

• Total Topics
633741
• Total Posts
3013622
×