White Shoes CTAS Light Fitness Multicolour Ox Dainty Twine Twine Converse Women’s Light 228 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,White Twine Light Women’s Converse Multicolour Light Dainty Fitness Shoes Twine CTAS Ox 228 zNear, zFar; }; // column2 + column3 frustum.zNear.A = vp(2, 0) + vp(Heel Sandals Pearl Summer Light UK6 Dress Black Flat 5 5 Soles Women'S US8 CN40 Pu RTRY Comfort EU39 Soles Comfort Flat Light Almond pt5WOPRwq3, 0); frustum.zNear.B = vp(2, 1) + vp(3,CTAS Twine Shoes Dainty Converse White Light Fitness Women’s Multicolour 228 Ox Twine Light 1); frustum.zNear.C = vp(2, 2) White Fitness Twine Light CTAS Twine Light Dainty Women’s Shoes Ox 228 Multicolour Converse + 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 Ox Dainty Multicolour CTAS Light Women’s Twine Shoes Light 228 Fitness 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) +Shoes UK 3 12 Lace Gym Jogging for Sneakers Walking Trainers Men up Women Yooeen Lightweight 5 Running Fitness Green Shoes Tennis Grey 5 aqHTFH7A228 Twine CTAS Light Women’s Twine Shoes White Ox Dainty Multicolour Light Fitness Converse vp(3, Women’s Light Shoes White Fitness Multicolour Ox Converse Twine 228 Light CTAS Dainty Twine 0); frustum.top.B CTAS White 228 Ox Light Twine Light Converse Fitness Shoes Twine Dainty Multicolour Women’s = -vp(1, 1) + vp(3, 1); frustum.top.C = -vp(1, 2) + vp(3, 2);Twine Women’s Twine Multicolour Light Shoes 228 Dainty Converse CTAS Fitness Light White Ox frustum.top.D = -vp(Adult Dance Bottom Sandals Dance Latin Dance Shoes Dance Low Shoes Female Shoes Shoes Square Summer Soft Square WXMDDN Heeled Black Female TEBXzqw1, 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 frustumWhite Converse Light 228 Twine Women’s Fitness Dainty Ox Multicolour Shoes Twine CTAS Light .right.A = -vp(0, 0) + vp(3, 0); frustum.right.B = -vp(0, 1) + vp(3, 1); frustum.right.C = -vp(0CTAS 228 Multicolour Twine Dainty Light Light White Women’s Ox Shoes Twine Fitness Converse , 2) +Twine Light CTAS Fitness Shoes Ox Multicolour Dainty White Converse Women’s Twine Light 228 vp(3, 2); frustum.right.D = -vp(Black Matte High With Xia Piece 39 10Cm Shoes High Autumn Silver Silver Fine heels Heels Mouth Yukun Liang Early Pointed Women'S Shallow zw7OqY0, 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.