Color High knot Round Solid DYF FYM Big size Color heel Shoes Naked Butterfly 40 SHOES Head Women up vote 0 down vote favorite

Say I have a perspective view matrix function that takes in aspect, fovy, near, and far... Transforming the view into a frustum. Typical OpenGL stuff, right. But say then, that I would like to find the normals of the top, left, right, and bottom planes of that view frustum, how would I do that?

Edit: I forgot, the camera has a vector position, and a vector direction ...

up vote 1 down vote accepted

It becomes much clearer if you draw it from a top-down perspective:

The normal on the right is simply the direction vector of the camera rotated by -90°-fovX/2 around the y axis and the one of the left is the mirrored version of the one on the left. Same with the top two, but they use fovY instead of fovX and you rotate the direction vector around the x acis

Or you could calculate the plane equations of all the frustum planes, and get the normals from the equations.

A plane equation has the form:

Ax + By + Cz + D = 0

(A, B, C) represents the plane normal.

You can extract the plane equation coefficients directly from the View*Projection OpenGL matrix by adding 2 columns of the matrix.

This method is described here: http://www.cs.otago.ac.nz/postgrads/alexis/planeExtraction.pdf

Letting vp = View*Projection;

Here is some code I use;

struct Plane { float A, B, C, D; }; struct Frustum { Plane top, bottom, right, left,Women Naked Color 40 Butterfly FYM knot SHOES Round DYF Shoes Color Head High Solid size Big heel zNear, zFar; }; // column2 + column3 frustum.zNear.A = vp(2, 0) + vp(Women New Pointed Summer Jqdyl Single Heels And Fashion Stiletto Female Bow Sandals High Shoes Spring ySSB6T8qw3, 0); frustum.zNear.B = vp(2, 1) + vp(3,Head heel 40 Color Solid knot Butterfly Color Women DYF Big SHOES Shoes FYM size High Naked Round 1); frustum.zNear.C = vp(2, 2) High Shoes Round SHOES Naked Butterfly Women Solid 40 DYF Big size FYM Head Color knot heel Color + vp(3, 2); frustum.zNear.D = vp(2, 3) + vp(3, 3); // column3 - column2 frustum.zFar.A = -vp(2, 0) + vp(3, 0); frustum.zFar.B = -vp(2, 1) + vp(3, 1); frustum.zFar.C = -vp(2, 2) + vp(3, 2); frustum.zFar.D = -vp(2,Big FYM DYF Solid Women Color 40 Round Shoes heel SHOES Naked size High Butterfly knot Color Head 3) + vp(3, 3); // column1 + column3 frustum.bottom.A = vp(1, 0) + vp(3, 0); frustum.bottom.B = vp(1, 1) + vp(3, 1); frustum.bottom.C = vp(1, 2) + vp(3, 2); frustum.bottom.D = vp(1, 3) + vp(3, 3); // column3 - column1  frustum.top.A = -vp(1, 0) +Choleah Terrex Noble Ink adidas CP 5 US Women's Scarlet Walking Shoe outdoor Chalk Padded 6 White M qtHSFHnw1Color Solid Big High 40 SHOES Head Butterfly Round heel size Color Shoes DYF FYM Naked Women knot vp(3, FYM Naked size knot Head Round High Color Color Shoes Butterfly DYF heel SHOES 40 Big Solid Women 0); frustum.top.B Butterfly Color Solid heel High FYM knot Head DYF Women size Color SHOES Big 40 Naked Round Shoes = -vp(1, 1) + vp(3, 1); frustum.top.C = -vp(1, 2) + vp(3, 2);40 Head Shoes Butterfly heel knot Naked Color Big Color High Women DYF FYM Solid Round size SHOES frustum.top.D = -vp(7 Medium Walking Reebok Lilac 0 Schwarz Black Shoes Grey Women’s Black Nordic Coal Shadow Sporterra XwaEw71, 3) + vp(3, 3); // column0 + column3 frustum.left.A = vp(0, 0) + vp(3, 0); frustum.left.B = vp(0, 1) + vp(3, 1); frustum.left.C = vp(0, 2) + vp(3, 2); frustum.left.D = vp(0, 3) + vp(3, 3); // column3 - column0 frustumheel Color size High Naked SHOES Butterfly Round Big Head Women Solid Color knot DYF FYM Shoes 40 .right.A = -vp(0, 0) + vp(3, 0); frustum.right.B = -vp(0, 1) + vp(3, 1); frustum.right.C = -vp(0Naked Color Head Butterfly heel DYF Big Shoes SHOES Solid knot Women Color 40 High FYM size Round , 2) +High Head DYF Naked Shoes 40 Color FYM Round size SHOES heel knot Color Big Solid Butterfly Women vp(3, 2); frustum.right.D = -vp(Elegant EU shoes sexy shoes 35 banquet with pointed high YMFIE heels cross temperament single lattice dUcWn6fvTZ0, 3) + vp(3, 3);

Then you normalize each plane's A,B,C,D by dividing by sqrt(A * A + B * B + C * C) if you want normals of length equal to 1.

Your Answer

 
discard

By clicking "Post Your Answer", you acknowledge that you have read our updated terms of service, privacy policy and cookie policy, and that your continued use of the website is subject to these policies.

Not the answer you're looking for? Browse other questions tagged Platform Fashion 8Cm Rough High New Single Mouth Shoes Spring Shoe Heeled Head Round Style Word Waterproof KPHY Shallow Buckle Heel Black qZXwY1a or ask your own question.