JohnnyCode 1046 Report post Posted May 31, 2013 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. 0 Share this post Link to post Share on other sites
Inferiarum 739 Report post Posted May 31, 2013 (edited) 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 May 31, 2013 by Inferiarum 0 Share this post Link to post Share on other sites
Brother Bob 10344 Report post Posted May 31, 2013 (edited) 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 May 31, 2013 by Brother Bob 2 Share this post Link to post Share on other sites
JohnnyCode 1046 Report post Posted June 3, 2013 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? 0 Share this post Link to post Share on other sites
Brother Bob 10344 Report post Posted June 3, 2013 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. 1 Share this post Link to post Share on other sites
JohnnyCode 1046 Report post Posted June 3, 2013 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. 0 Share this post Link to post Share on other sites
Brother Bob 10344 Report post Posted June 3, 2013 (edited) 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 June 3, 2013 by Brother Bob 1 Share this post Link to post Share on other sites