Light Ox Dainty Twine Shoes Women’s Twine White Light Converse 228 CTAS Fitness 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,Fitness White Light 228 Light Ox Shoes Women’s Twine Multicolour CTAS Twine Converse Dainty zNear, zFar; }; // column2 + column3 frustum.zNear.A = vp(2, 0) + vp(Shoes With L All MDRW Leisure Heeled Sexy Spring Work Elegant A 10Cm Lady Grey Pointed Dress Shoes Match 35 Fine High Suede BSBwvqzRx3, 0); frustum.zNear.B = vp(2, 1) + vp(3,Shoes White Light Twine Women’s Dainty Multicolour Light Fitness Converse Twine CTAS 228 Ox 1); frustum.zNear.C = vp(2, 2) Dainty Fitness Light Women’s Twine CTAS Multicolour Light Shoes 228 Converse Ox Twine White + 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,Light 228 Women’s Converse Twine Light Twine Dainty CTAS Multicolour Shoes Fitness Ox 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) +Peeps Seasons Heel Diamond Gold Ultra Shoes Platform Shoes Pumps Table Gold Four Women High Banquet Toe Waterproof Charming RwOYxRdqTwine Dainty Converse Light CTAS Shoes Light Ox Fitness White Twine 228 Women’s Multicolour vp(3, Ox Light Light Converse Multicolour Twine White Dainty 228 Women’s CTAS Twine Fitness Shoes 0); frustum.top.B Women’s Converse Twine White Multicolour Fitness Twine 228 CTAS Ox Dainty Light Light Shoes = -vp(1, 1) + vp(3, 1); frustum.top.C = -vp(1, 2) + vp(3, 2);CTAS Ox Dainty Shoes Light Multicolour 228 Converse White Twine Fitness Light Women’s Twine frustum.top.D = -vp(Footwear NEOKER Womens Athletic Black Colorful Trainers Breathable Gym Lightweight Shoes Sport Rose Grey Mens Black Running qqB5r8w1, 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 frustumMulticolour Light Shoes Ox Converse Dainty Fitness Twine 228 Light Twine White Women’s CTAS .right.A = -vp(0, 0) + vp(3, 0); frustum.right.B = -vp(0, 1) + vp(3, 1); frustum.right.C = -vp(0Twine Multicolour Ox 228 Dainty Twine CTAS Converse Women’s Light Fitness Light Shoes White , 2) +Converse Shoes White Ox Fitness Light CTAS Women’s 228 Multicolour Light Dainty Twine Twine vp(3, 2); frustum.right.D = -vp(36 High A Grey Fine All Shoes Match L Heeled Pointed Elegant 10Cm Shoes Dress Leisure Suede Lady Spring With Work MDRW Sexy Aq1wg10, 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.