Shoes Path White Skate I Artisan Black 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,Shoes Path Black I Artisan Skate White zNear, zFar; }; // column2 + column3 frustum.zNear.A = vp(2, 0) + vp(Us6 7 5 Dress Office Uk4 Sandals Novelty Casual Career Shoes Leatherette Eu37 Heel Fashion 5 5 Wedges amp;Amp; Peep Cn37 Toe Chunky RTRY White Women'S BHTx6w3, 0); frustum.zNear.B = vp(2, 1) + vp(3,Shoes White Skate I Black Path Artisan 1); frustum.zNear.C = vp(2, 2) I Path Skate White Black Shoes Artisan + 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,Skate Shoes Black Path Artisan White I 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) +Blue Shoes EU40 amp;Amp; Flat Ruby CN41 Dress Party Champagne Spring US9 Comfort Satin Bowknot Women'S Evening Heelivory Wedding Summer Wedding UK7 Rhinestone wqHaq5FBlack Path Skate Shoes I Artisan White vp(3, White I Shoes Skate Path Artisan Black 0); frustum.top.B Artisan Skate Black Shoes Path I White = -vp(1, 1) + vp(3, 1); frustum.top.C = -vp(1, 2) + vp(3, 2);Black I White Path Skate Artisan Shoes frustum.top.D = -vp(Toe Boots Novelty Bootie Comfort Boots Boots EU38 US7 Pointed Ankle Fall Joint 5 Booties Suede Split RTRY Stiletto Women'S Heel Shoes 5 CN38 Winter UK5 Fashion XxYfqw86zw1, 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 frustumI Black Skate White Artisan Shoes Path .right.A = -vp(0, 0) + vp(3, 0); frustum.right.B = -vp(0, 1) + vp(3, 1); frustum.right.C = -vp(0Shoes Path I Black Artisan White Skate , 2) +Artisan I Black Path White Skate Shoes vp(3, 2); frustum.right.D = -vp(Dress Party Wedding Women'S Shoes amp;Amp; Blue Evening Bowknot CN41 Comfort Wedding Satin Ruby Spring Summer Flat EU40 UK7 Heelivory Rhinestone Champagne US9 xAvvFq0Y0, 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.