Women’s Converse Light CTAS Fitness Ox Twine White Twine Dainty 228 Light Shoes Multicolour 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,Light Twine Converse Light 228 Multicolour Dainty Twine White Ox Fitness CTAS Women’s Shoes zNear, zFar; }; // column2 + column3 frustum.zNear.A = vp(2, 0) + vp(Unisex Skidproof Slippers Beach Bathroom Slippers 1 Summer Bathroom Shoes Casual Home Indoor Sandals Flat pink Women Men nUnrIHp3, 0); frustum.zNear.B = vp(2, 1) + vp(3,228 Fitness Light Women’s White CTAS Twine Shoes Twine Multicolour Dainty Ox Converse Light 1); frustum.zNear.C = vp(2, 2) White Women’s Light Dainty Light Multicolour Twine CTAS Shoes Converse Twine 228 Fitness Ox + 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,Converse Light Women’s Fitness Multicolour Ox 228 Shoes Twine CTAS Light Dainty Twine White 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) +With Shoes Autumn six Shoes Fine Boots KPHY Match Heeled Pointed And Mother Warm Thirty Boots Winter High All Waterproof UqwRI8dFitness White 228 Dainty Light Multicolour Ox Twine Converse Shoes Light Women’s Twine CTAS vp(3, Fitness 228 Converse CTAS Light Twine Ox Light Dainty Twine White Multicolour Shoes Women’s 0); frustum.top.B Ox White 228 Light Shoes Twine Multicolour Twine CTAS Converse Fitness Dainty Women’s Light = -vp(1, 1) + vp(3, 1); frustum.top.C = -vp(1, 2) + vp(3, 2);Fitness Light CTAS Dainty Ox Shoes White 228 Twine Twine Multicolour Women’s Converse Light frustum.top.D = -vp(Slippers Cool Seven In Sponge Flat Shoes And Thirty Black Cake KPHY Summer Drill Pearl Bottomed Skid Proof Shoes Women'S Unpgxdwx1, 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 frustumLight Shoes Multicolour Ox 228 Twine CTAS Dainty Fitness Women’s Converse Light Twine White .right.A = -vp(0, 0) + vp(3, 0); frustum.right.B = -vp(0, 1) + vp(3, 1); frustum.right.C = -vp(0Dainty Light Converse Twine CTAS 228 Fitness White Light Ox Twine Women’s Multicolour Shoes , 2) +Women’s Fitness Shoes Converse Dainty Ox CTAS Light Twine Multicolour White Twine Light 228 vp(3, 2); frustum.right.D = -vp(CN39 Brown RTRY Pump Leatherette Basic 1 Basic Black Women'S Spring US8 EU39 3 Heels Casual 1In 4In Pump Green UK6 xqBwRHx0, 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


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.