Sign in to follow this  
JohnnyCode

Projection matrix confusion

Recommended Posts

JohnnyCode    1046

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 this post


Link to post
Share on other sites
Inferiarum    739
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 this post


Link to post
Share on other sites
Brother Bob    10344

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 this post


Link to post
Share on other sites
JohnnyCode    1046

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 this post


Link to post
Share on other sites
Brother Bob    10344

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 this post


Link to post
Share on other sites
JohnnyCode    1046

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 this post


Link to post
Share on other sites
Brother Bob    10344

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

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this