Talk:3D projection

From Wikipedia, the free encyclopedia
Jump to: navigation, search
WikiProject Mathematics (Rated Start-class, Low-importance)
WikiProject Mathematics
This article is within the scope of WikiProject Mathematics, a collaborative effort to improve the coverage of Mathematics on Wikipedia. If you would like to participate, please visit the project page, where you can join the discussion and see a list of open tasks.
Mathematics rating:
Start Class
Low Importance
 Field: Geometry

New Discussion[edit]

Old discussion[edit]

Old discussion has been archived to: Talk:3D projection/Archive 1.

Stestagg 19:21, 11 September 2007 (UTC)

Replaced[edit]

I replaced the article text, then grappled with the copybot some, then replaced it again. Below are the unresolved criticisms of the new text from before it was put on the article page:

This article is far to difficult for newcomers, and now when I direct new programmers here they no longer come back feeling like they have gained anything. And rather than give the rotation matrix, why not give the (much more intuitive) UVN vector system. Cearn also has a wonderful (beginner friendly) description of vector maths ( http://www.coranac.com/tonc/text/matrix.htm ), maybe take a page out of his book. 82.23.55.86 07:26, 4 October 2007 (UTC)
Yes, there should be more information about different ways to express the orientation. Nobody uses Euler angles like this. Feel free to describe how to use vectors instead. Probably we also should mention quaternions. You can try and look for some information yourself, else it might be some time until someone else gets around to it. It's how Wikipedia works. (But keep in mind Wikipedia:What_Wikipedia_is_not - e.g. there should not be a tutorial how to do 3D programming with DirectX and OpenGL, that's something which should go to Wikibooks instead of Wikipedia.) --Allefant 10:48, 4 October 2007 (UTC)
I think, we should concentrate on perspective projection here. There's already Graphical_projection, with apparently some kind of different bias compared to this article, so there might be overlap if we put everything here as well, just with a mathematical bias. Instead, I think your section below about orthographic projection would perfectly fit into the orthographic projection article, as an additional math section. Same for isometric projection. They woefully omit any mathematical information currently. For Perspective_projection on the other hand, it might be better to not include the mathematical aspects in detail in that article - so I guess it's what this very article could be for. And it should of course be like you started below, a general description of (perspective) 3d projection - as I think that info is currently missing in Wikipedia. --Allefant 11:07, 13 August 2007 (UTC)
So, looking at a bigger picture, in the end, we'd end up with articles about different projections (perspective, orthographic, isometric..), describing each from different angles (math, computer, artists, ...). Should any of them ever try to achieve featured quality, I think that's the best way. And there's also lots of math articles already to back up the purely mathematical side (like Projection (linear algebra)). So, if you agree, I'd like to put the orthographic and isometric sections into their articles, they only need minor modifications for that I think (and maybe more detailed source information). And what you wrote for perspective projection definitely looks like it's going in the right direction. --Allefant 11:07, 13 August 2007 (UTC)
I agree with you. Ideally, this page could just be a list of projections with links to individual pages. I will finish this article here as proposed, and then we can decide where to put the sections. It is important to me that someone who arrives at this page should easily be able to find formulae for the common projections, so good linking would be imperative.

--Stestagg 15:00, 13 August 2007 (UTC)

Well, such a list of projections is already in Graphical projection, so probably we should consider that one the page where people "arrive". (We can always rename/redirect article names of course.) But yeah, just wanted you to be aware that there's already a few, somewhat unordered, articles related to this topic. And I'm only a very minor contributor myself, so once your text is ready to be moved into article space, others with different ideas may show up as well :) --Allefant 15:22, 14 August 2007 (UTC)
I'll leave the page-structure up to people with a much better working-knowledge of Wiki guidelines. :), although perhaps the Graphical projection page should be about either n-dimentional projection, or about artistic projection. --Stestagg 16:57, 14 August 2007 (UTC)
Why is the \theta_y matrix flipped? —The preceding unsigned comment was added by 15.235.249.71 (talk) 23:07, August 21, 2007 (UTC)
What do you mean? If you mean this one \begin{bmatrix}
   {\cos -\mathbf{\theta}_y } & 0 & { - \sin -\mathbf{\theta}_y }  \\
   0 & 1 & 0  \\
   {\sin -\mathbf{\theta}_y } & 0 & {\cos -\mathbf{\theta}_y }  \\
\end{bmatrix} - it looks the same in my reference here - even if they do proceed a bit differently. --Allefant 15:48, 24 August 2007 (UTC)

TODO[edit]

Some things which I think should be addressed:

  • Overlap with other articles. For example isometric projection might be described in graphical projection, in orthographic projection, in axonometric projection, here, and in its own article. Basically, the whole field of descriptive geometry seems to be not in very good shape, as can be seen at the mother article itself (not a single reference, and some questionable statements scattered throughout the text).
  • Expand contents. For example, for perspective projection, mention things like one-point/two-point/three-point perspective, and things like OpenGL or DirectX. For other types of projection, add missing ones, and better describe relations. But, depending on the first point, that all might go into the respective articles of those projections.
  • Copyedit/clarify. Some things might be too detailed (do we really need a matrix multiplication multiplied out for the reader?), others way too short, and there's always style/formatting problems of course.. --Allefant 11:18, 25 September 2007 (UTC)

The two sets of equations for {b_x,b_y} are inconsistent. I think the matrix expression is wrong, the matrix appears transposed from what it should be. If I transpose it and multiply it out I get

f_x = d_x - e_x f_y = d_y - e_y f_z = d_z f_w = 1/e_z

then I can only recover the original {b_x,b_y} definitions with

b_x=f_x/(f_z*f_w) b_y=f_y/(f_z*f_w)

which doesn't really simplify anything ... perhaps the matrix version can just be removed. —Preceding unsigned comment added by 142.46.167.2 (talk) 21:33, 16 October 2007 (UTC)

Indeed, I copied it from the paper by Carlbom which uses row vectors instead of column vectors for positions, and messed up the transposing :/ Instead of removing the matrix versions, I think it would be clearer to remove the non-matrix versions. Also, the non-matrix perspective equation I just calculated from the matrix in the paper, but I was confused by what they are doing with the 4th "w" coordinate.. so that also needs to be double checked. (I'm neither an expert on this nor do I know any maths except from other WP articles like e.g. matrix multiplication.. ) --Allefant 23:17, 16 October 2007 (UTC)

Please don't remove the non matrix versions ... that is my only usable reference. And they are un-obfuscated so to speak.


Indeed, I included the non-matrix bit because I hate working with matrices unless I really have to, and I assume many other people share this feeling (or lack of understanding). I realise it is a bit of a pain to update, but, as you proved ( :) ), it is easy to get matrix multiplication wrong, even with Quaternions (:shudder:).
I'm a little confused by the inclusion of the observer variable, it isn't really neccesary, and confuses things slightly, however if that is convention then I agree it makes sense to have it included.
Stestagg 21:28, 20 October 2007 (UTC)
Yes, we need more text describing what is going on. With the observer position, it should be clear how to change the field of view (and center of projection). There's likely other ways, and a good article should mention all of them (but observer variable is the only one I can think of right now). --Allefant 12:01, 21 October 2007 (UTC)

For non-mathematicians[edit]

This section should be called differently, e.g. "explanation", as the matrix multiplications aren't for mathematicians either (matrices are used by engineers/graphics programmers, because e.g. OpenGL and DirectX use them - mathematicians likely would not).

Also, why is it using different letters than the above section? That seems rather confusing - can it be changed to use the same ones? --Allefant (talk) 15:47, 25 November 2007 (UTC)

>> matrix multiplications aren't for mathematicians either
ORLY? Kallikanzarid (talk) 10:32, 22 November 2010 (UTC)

Perspective transform[edit]

I find the article about the perspective transform to be less than what one would hope for in present day Wiki. The topic is sufficiently complex as to warrant a 'gentle' introduction, with diagrams, and a mention of all the variations that one finds on the Net. For example, the description in: http://www.whisqu.se/per/docs/graphics91.htm derives a slightly different set of transform matrices. Since the topic is not intuitively obvious, the gently introduction can lead to an extensive article, in which homogeneous coordinates are clearly justified, the use of the rotational transformations explained, and I would suggest a numerical example.

Per Bj. Bro (talk) 01:21, 2 January 2008 (UTC)

I agree. I hope the current matrices are correct insofar as they do exactly the same as the non-matrix versions given. There definitely needs to be more explanation, and it also should be mentioned that there are many more possible representations than the variables chosen here. I also agree that a numerical example would help, and ideally it would be combined with a diagram - the current one doesn't really seem to fit the text. Also actual pictures of the result might help, but we should avoid overlap with perspective (graphical). --Allefant (talk) 12:37, 7 January 2008 (UTC)

Text needs explenation[edit]

What does "the viewer position in camera space" actually mean? How does it differ from the camera position? 89.139.239.75 (talk) 19:27, 24 March 2008 (UTC)

Yes, this article needs a lot of work. The \mathbf{e}_x and \mathbf{e}_y simply shift the whole image around, in a painting it would mean that the vanishing point is not in the center but at some other position (I think). The \mathbf{e}_z defines the field of view of the resulting image. A diagram would make it all clear I think. --Allefant (talk) 13:44, 27 March 2008 (UTC)
Seconded. Everything was going swimmingly until I encounted e_x and e_y. Does e_* have anything to do with the near clip plane?82.3.69.123 (talk) 19:58, 2 April 2008 (UTC)
As far as I can tell, the formulae here assume that the bottom left corner of your screen is at (-1,-1) and the top-right is at (1,1). \mathbf{e}_x and \mathbf{e}_y refer to the viewer's position with respect to the screen / projection plane / display surface. I changed "camera space" to say "display surface" which seems more helpful to me in the context. Camera space confused me a little when I first read it, too.
Assuming the viewer is looking directly at a vanishing point, \mathbf{e}_x and \mathbf{e}_y will be the position of that vanishing point on the screen. \mathbf{e}_z defines the FOV indirectly because as the viewer approaches the screen, the FOV should increase. (Mesilliac (talk) 06:23, 15 October 2008 (UTC))

Merger proposal[edit]

  • I propose moving the page from "3D projection" to "Planar Projection" as the page does not discuss all types of 3D projection. This way, the page can be placed more appropriately within the "Views" template.Kevmitch (talk) 13:20, 25 March 2008 (UTC)
  • On second thought, maybe it would be better to merge the content on this page with the Orthographic projection and perspective (graphical) articles which are lacking in the mathematical context provided here. Since this would effectively merge this page out of existence, I think some discussion of the matter is warranted. Kevmitch (talk) 14:13, 25 March 2008 (UTC)
  • Sounds good to me. --Allefant (talk) 13:38, 27 March 2008 (UTC)
  • Hm, not much response so far. Myself, I guess the problem is deeper than just this one merger. One thing is overlap of different areas, like visual arts (Perspective (graphical)), math/linear algebra (Projection (linear algebra)), games (Top-down perspective), descriptive geometry... and then there's overlap within the topics itself, like "planar projection -> parallel projection -> orthographic projection -> axonometric projection -> isometric projection" - that's also bound to not really work out with one article for each level. So need to somehow work out a structure what topics should have how many articles here. And another problem is, no matter from which area you look at the topics, someone writing on them needs to be a bit of an expert in the field. Myself I came here from the article about isometric games... --Allefant (talk) 13:49, 14 April 2008 (UTC)
  • Ok, so the main counter-argument, as I see it, to merging is quite subtle, but if this page were merged directly with Perspective/Orthographic Projection, there would be more of an argument for the content's complete removal, certainly people might call for the content to be made more terse, and less understandable for less-qualified mathematicians. The Perspective projection page is already long, and deals with the issue from an art-history perspective. A merger would broaden the scope of the article to the extent that some content from either article would, most likely, be [slowly] removed for the sake of article length. —Preceding unsigned comment added by Stestagg (talkcontribs) 14:18, 14 May 2008 (UTC)
  • Those who want to learn about perspectve from an art perspective is not interested in reading a lot of the math required to do the transformations, but you certainly are if do computer graphics or otherwise work with coordinate transformations, so these pages should not be merged, simply because they cover (should cover) different aspects of the topic. —Preceding unsigned comment added by 129.177.20.38 (talk) 09:53, 16 June 2008 (UTC)
  • I say no. This math theory is exactly what I was looking for, but would be out of place amongst art-history and non-math theory. I might not have found this information in another context. AridWaste (talk) 22:18, 19 February 2010 (UTC)

Homography?[edit]

3D projection and homographic projection are closely related. Would anyone care to explain how the two are different? —Ben FrantzDale (talk) 18:30, 10 May 2008 (UTC)

A 3d projection is a transform that maps 3D points into 2d space. A Homograph is a transform that describes the difference between 2 [homographic] 3d projections.
So, for example, to perform 3d rangefinding, you might have 2 cameras sitting, say, 1m apart. Each camera is performing a different, but homographically relative, perspective 3d-projection of the same scene, therefore the Homograph for these cameras can be calculated. So, now we identify a common point in both camera images(A,B). One feature of a homograph of 2 perspective projections is that the transformation of point A[x,y] to point B[x,y], where A and B are known is only possible at a particular range. So the distance from the cameras to the point can be inferred as a by-product of satisfying the Homograph that translates projection 1 onto projection 2.
From what I can find out, the little-used term 'Homographic Projection' is not well defined. But 3-d rangefinding could be called 'homographic projection' in that it projects 2d points into a 3d volume.
Also, Applying Transforming the points of a normal projection using a homograph could be described as 'a homographic projection'.
Stestagg (talk) 13:58, 14 May 2008 (UTC)
OK, that sounds about right. It seems like it would be accurate to say that a homography can be implemented in terms of 3D projection in that if I have a function that does arbitrary "3D projection", I could perform a homographic (re)projection on an image by putting it on a flat surface and using the 3D-projection function. Sound right? —Ben FrantzDale (talk) 00:44, 16 May 2008 (UTC)
I hope I understand what you mean. A 2d image is already 'on a flat surface' in as much that all points lie on a 3d surface [usually a Plane]. The only way to reconstruct a 3d scene from a 2d image is either to have a second view on it, or if the original 3d points were [say] coplanar and you know what plane that was. Otherwise, you have to use a certain ammount of guesswork, and not homographs directly. Stestagg (talk) 21:15, 21 May 2008 (UTC)
What I was trying to say is this: As I understand it, if I want to perform a homography on an image, one way to do it would be to consider it as a plane in 3D and perform a projection from 3D space through a point in 3D space to another plane in 3D space. In that sense, I feel like a homography and a 3D projection are almost the same thing. But I'm open to correction. —Ben FrantzDale (talk) 23:26, 21 May 2008 (UTC)
I'm not so comfortable with the idea that the homograph and a 3-d projection are 'almost the same thing'. A 3-d projection deals with projecting 3-d points in 3-d space, into n-d points in n-d space. A [for example] 3-d homograph deals with projecting 2-d points into 2-d points, in 3-d space. It's similar to saying that a 'straight line' and a 'polynomial' are almost the same thing. 81.152.97.194 (talk) 10:13, 24 May 2008 (UTC)

New image[edit]

Please post comments on the new lead image at Wikipedia:Graphic_Lab/Images_to_improve#3D projection. Thanks. Dhatfield (talk) 11:48, 28 June 2008 (UTC)

I'm for removing the image or at least changing the caption, since
The image in question?
that's plainly _not_ "A 3D perspective of an array of cubes". Either those objects are not cubes or it's not a perspective projection. --Rubik's Cube (talk) 17:02, 1 July 2008 (UTC)
I removed the image, given the glaring inaccuracies in perspective, pending a discussion on this page. 81.152.21.117 (talk) 10:57, 5 July 2008 (UTC)
For reference, I've added a reference render created in Blender(software).
True Perspective
There are cubes in a 3d projection. I set the 'focal-length' to a very low value to emphasise the 'perspective effect'. For this reason, the image may look slightly different than might come from an optical camera, as most wide-angle camera lenses introduce significant barrel-distortion/fisheye. Stestagg (talk) 11:07, 5 July 2008 (UTC)[a.k.a. 81.152.21.117]

Incorect Formula[edit]

I think the projection formula is wrong. The formula:


\begin{array}{lcl}
 \mathbf{b}_x &= &(\mathbf{d}_x - \mathbf{e}_x) (\mathbf{e}_z / \mathbf{d}_z) \\
 \mathbf{b}_y &= &(\mathbf{d}_y - \mathbf{e}_y) (\mathbf{e}_z / \mathbf{d}_z) \\
\end{array}

Doesn't work because Dz is the distance between the point and the projection plane. If you look at the diagram below the formula, Ez is divided by the distance between the point and the viewer:


\begin{array}{lcl}
 \mathbf{b}_x &= &(\mathbf{d}_x - \mathbf{e}_x) (\mathbf{e}_z / (\mathbf{e}_z + \mathbf{d}_z)) \\
 \mathbf{b}_y &= &(\mathbf{d}_y - \mathbf{e}_y) (\mathbf{e}_z / (\mathbf{e}_z + \mathbf{d}_z)) \\
\end{array}

I have tested this one and it works for me. The homogeneous version is still equivalent to the incorect one. Perhaps someone with knowledge of matrices can correct it? 67.68.181.38 (talk) 15:35, 5 October 2008 (UTC)

Ez is the distance between viewer and projection plane, and Dz is the distance between viewer and point.. so I wouldn't be sure the original formula wasn't right. What do you mean with it doesn't work? --Allefant (talk) 00:18, 6 October 2008 (UTC)
Here's an example.

\mathbf{a}=\begin{bmatrix}4 \\ 0 \\ -6\end{bmatrix}

\mathbf{c}=\begin{bmatrix}2 \\ 0 \\ -2\end{bmatrix}

\mathbf{\theta}=(0,0,0)

\mathbf{e}=\begin{bmatrix}0\\0\\-2\end{bmatrix}


\begin{bmatrix}
   \mathbf{d}_x \\
   \mathbf{d}_y \\
   \mathbf{d}_z \\
\end{bmatrix}=\begin{bmatrix}
   1 & 0 & 0  \\
   0 & {1} & {0}  \\
   0 & {0} & {1}  \\
\end{bmatrix}\begin{bmatrix}
   {1} & 0 & {0}  \\
   0 & 1 & 0  \\
   {0} & 0 & {1}  \\
\end{bmatrix}\begin{bmatrix}
   {1} & {0} & 0  \\
   {0} & {1} & 0  \\
   0 & 0 & 1  \\
\end{bmatrix}\left( {\begin{bmatrix}
   4  \\
   0  \\
   -6  \\
\end{bmatrix} - \begin{bmatrix}
   2  \\
   0  \\
   -2  \\
\end{bmatrix}} \right)=\begin{bmatrix}
2\\
0\\
-4\\
\end{bmatrix}


\begin{bmatrix}
   \mathbf{f}_x \\
   \mathbf{f}_y \\
   \mathbf{f}_z \\
   \mathbf{f}_w \\
\end{bmatrix}=\begin{bmatrix}
   1 & 0 & 0 & 0 \\
   0 & 1 & 0 & 0 \\
   0 & 0 & 1 & 0 \\
   0 & 0 & 1/-2 & 0 \\
\end{bmatrix}\begin{bmatrix}
   2  \\
   0  \\
   -4  \\
   1 \\
\end{bmatrix} =\begin{bmatrix}
  2\\
  0\\
  -4\\
  2\\
\end{bmatrix}

and


\begin{array}{lcl}
 \mathbf{b}_x &= &1 \\
 \mathbf{b}_y &= &0 \\
\end{array}
So the original formula is right. I think we need to somehow clarify what \mathbf{e} and especially e_z really is. --Allefant (talk) 13:22, 8 October 2008 (UTC)
I've reverted the changed formula to correspond to the matrix one. As far as I can tell the diagram below it is incorrect, not the formulae. I added a small clarification of what 'e' and 'ez' refer to by using the term "display surface" in stead of "camera space". There might be a better term, I'm not yet familiar with this stuff myself. (Mesilliac (talk) 06:09, 15 October 2008 (UTC))

Temporal Vector d for (un)clarity[edit]

Why would we need to introduce a "vector d" that is exactly (1, 1) via matrix multiplication, when this vector then is multiplied by a diagonal matrix anyway? Is this some kind of mathematical joke? 129.27.12.17 (talk) 14:13, 20 April 2010 (UTC)

For mathematicians[edit]

I suggest to scrap the whole "Perspective projection" section, it's utterly useless and painful to the eye. —Preceding unsigned comment added by Kallikanzarid (talkcontribs) 10:45, 17 November 2010 (UTC)

Game Development[edit]

From the perspective of a game developer, I would never use the algorithm provided in the “Perspective Projection” section. Euler angles are a horrible way to store rotation; one typically represents that information using a matrix. If such is the case, one would simply multiply “a - c” by that single matrix to derive “d,” rather than calculating a rotation matrix for each Euler angle, which is an absurd waste of CPU cycles.

This approach, where it is assumed a rotation matrix is already associated with the camera, should be brought to the reader’s attention; I’ll do it myself if I get the chance. The only caveat is that 3D programming frameworks like Microsoft’s WPF typically store the camera’s backward-facing direction in the third row, whereas the modified algorithm would seem to expect the third row to provide the camera’s forward vector. (Requiring a simple negation.) -- Premonition2035 (talk) 07:29, 22 January 2011 (UTC)

Mapping or projecting?[edit]

Sorry guys, I didn't make it past the first sentence, shouldn't "3D projection is any method of mapping three-dimensional points to a two-dimensional plane" read "3D projection is any method of mapping three-dimensional points from a two-dimensional plane" — Preceding unsigned comment added by MrJosiahT (talkcontribs) 22:41, 22 August 2011 (UTC)

I don't think so. I think it's correct as is. We are talking about projecting points from 3D. Since 2D points embedded in R3 are just in a 2D subspace, there's nothing for them to land on other than another 2D surface. For that operation—mapping 2D plane to 2D plane as though through 3D space—see homography. I'd be tempted to remove "plane" from "...to a two-dimensional plane" to allow for the case of projecting 3D points onto arbitrary 2D manifolds, but that's not what this article is about. —Ben FrantzDale (talk) 12:04, 23 August 2011 (UTC)