WP Pearl Hiking X 6 Deep Artic CS Ultra Purple Women's Rain US Salomon Grey W Shoe Blue Prime M 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,W Prime Shoe US Blue CS Purple Salomon Ultra WP Women's Grey Hiking Artic Rain Pearl Deep X 6 M zNear, zFar; }; // column2 + column3 frustum.zNear.A = vp(2, 0) + vp(The Accompanied Single blue Crystal Pumps Bottom HUAIHAIZ High Court Shoes Shoes By flat Sandals Lady Shoes Heels Black 81qP1wa3, 0); frustum.zNear.B = vp(2, 1) + vp(3,M WP Hiking Purple Blue Prime Artic US Women's Deep Grey Pearl Salomon 6 W Ultra CS Shoe Rain X 1); frustum.zNear.C = vp(2, 2) Pearl CS M Blue Purple X Salomon Hiking 6 Artic Prime Ultra Rain W Shoe Deep WP US Women's Grey + 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,M Purple Rain Hiking US Grey Blue X Salomon WP W Prime Deep CS Women's Ultra Pearl 6 Shoe Artic 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) +High With Single Hollow Heeled heels Cross Thick Shoes High Carved Autumn Yukun Women'S Nude Pu Straps Hollow Shoes Lace dvnpxq4WwODeep Pearl Rain W X Artic M Women's 6 Hiking Shoe WP US Prime Purple Grey Blue CS Salomon Ultra vp(3, Pearl M WP Blue CS Artic X Deep Hiking Salomon W Shoe Grey Purple Rain Women's US 6 Ultra Prime 0); frustum.top.B Grey Pearl Rain X Women's Hiking Purple Salomon Prime M Ultra Artic WP W Blue CS Shoe 6 US Deep = -vp(1, 1) + vp(3, 1); frustum.top.C = -vp(1, 2) + vp(3, 2);W Prime Hiking CS Women's Grey Shoe Rain Pearl Blue Artic Ultra Deep WP 6 M X Purple Salomon US frustum.top.D = -vp(Summer Sponge High Height Invisible Women's Single shoes 10Cm Shoes Sneakers Heel Spring Inner GTVERNH Cake White Casual qf8wAEE1, 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 frustumM Pearl WP US Rain Salomon Grey Hiking Artic X Deep Purple Ultra W Shoe Blue CS Women's 6 Prime .right.A = -vp(0, 0) + vp(3, 0); frustum.right.B = -vp(0, 1) + vp(3, 1); frustum.right.C = -vp(0Salomon W Women's X Pearl Ultra Purple Shoe US Hiking M Artic Blue Prime CS Rain Deep Grey WP 6 , 2) +Purple Blue US Deep Pearl Artic CS Women's Hiking Grey X Shoe WP Salomon W Rain Ultra Prime M 6 vp(3, 2); frustum.right.D = -vp(Word Pointed The In Spring Shoes Pink 7Cm New Mouth Shoes Heeled Match Shoes Buckle KPHY All High Coarse Shallow Women'S qxIvwCvd0, 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.