• Create Account

# Projection matrix confusion

Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.

6 replies to this topic

### #1JohnnyCode  Members   -  Reputation: 158

Like
0Likes
Like

Posted 31 May 2013 - 08:52 AM

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.

### #2Inferiarum  Members   -  Reputation: 721

Like
0Likes
Like

Posted 31 May 2013 - 09:03 AM

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, 31 May 2013 - 09:07 AM.

### #3Brother Bob  Moderators   -  Reputation: 7738

Like
2Likes
Like

Posted 31 May 2013 - 09:22 AM

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, 31 May 2013 - 09:23 AM.

### #4JohnnyCode  Members   -  Reputation: 158

Like
0Likes
Like

Posted 03 June 2013 - 01:57 PM

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?

### #5Brother Bob  Moderators   -  Reputation: 7738

Like
1Likes
Like

Posted 03 June 2013 - 02:04 PM

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.

### #6JohnnyCode  Members   -  Reputation: 158

Like
0Likes
Like

Posted 03 June 2013 - 02:12 PM

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.

### #7Brother Bob  Moderators   -  Reputation: 7738

Like
1Likes
Like

Posted 03 June 2013 - 02:46 PM

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, 03 June 2013 - 02:48 PM.

Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.

PARTNERS