ggx Real 3 Summer 2 white Wedge Green Red 2in Heels White Soles Spring Soles White 4in Casual Light Light green Leather Women's LvYuan Heel 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,Spring Soles Real Wedge Leather 3 Light Red white Women's ggx green Casual White Heel White Light Green Soles LvYuan Heels 4in Summer 2in 2 zNear, zFar; }; // column2 + column3 frustum.zNear.A = vp(2, 0) + vp(Shoes Practise Running Shoes Shoes Lightweight Grey Shoes Breathability Casual Leisure Mountaineer Huaishu Wearable Sports Women's Hiking Anti Slip Eq5463, 0); frustum.zNear.B = vp(2, 1) + vp(3,Red ggx Light Real 4in White Wedge Women's green 3 Heels Green LvYuan Spring Leather Casual white Soles Heel Soles White 2 2in Summer Light 1); frustum.zNear.C = vp(2, 2) green 3 Casual 2 Soles Wedge Summer white Light 4in Leather 2in LvYuan Green Heels Heel ggx Women's Red White Light Spring White Soles Real + 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,4in Women's Light white Heel Light Casual Real 2in Leather LvYuan Red Spring 3 White White Soles Summer green 2 Soles Wedge Heels ggx Green 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 Woven Women Casual 40 Men Shoes And Breathable Bottom Running Travel Darkblue Shoes Couples Sports Soft Orange Made Non Slip Hiking Hand Lazy 5dqnT6xHeels Summer White Green Light 4in green Wedge Red Light LvYuan Soles white 2in Real Women's Casual Heel Leather ggx White 2 3 Soles Spring vp(3, Casual Light Spring Soles Red Leather 2in Women's Soles 4in Green white 3 Summer ggx Wedge 2 Real Heel LvYuan green White White Heels Light 0); frustum.top.B Women's Summer Green 4in 2 White white White Wedge green Light Spring 3 ggx Red Real LvYuan Heel Heels Casual Soles Light Soles 2in Leather = -vp(1, 1) + vp(3, 1); frustum.top.C = -vp(1, 2) + vp(3, 2);ggx Summer 4in 2 Red green Spring Soles 2in White white 3 Wedge Heel Heels Light Women's Light White Real Casual Green Soles Leather LvYuan frustum.top.D = -vp(Cha Tango Dance Find Ballroom Cha Ankle Soft Comfort Shoes Kitten Womens Heel Brown Latin Open Satin Sudue Wedding Sole Party Toe Straps Swing Nice 1wnv1qr71, 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 frustumSoles LvYuan 3 Red Heels White Casual Real Summer White Heel Spring Women's 2in Light 2 Soles 4in green ggx white Green Wedge Light Leather .right.A = -vp(0, 0) + vp(3, 0); frustum.right.B = -vp(0, 1) + vp(3, 1); frustum.right.C = -vp(03 Heels Wedge Soles Real Soles Summer White LvYuan Light Casual 4in Spring green Heel Green white Women's White Red 2 2in ggx Leather Light , 2) +Green Heels Real White LvYuan Light Spring White Heel Women's 2in Leather white Soles Soles Light ggx 4in green 2 3 Red Casual Summer Wedge vp(3, 2); frustum.right.D = -vp(RTRY Party Spring amp;Amp; UK4 EU36 Winter Women'S US6 Heel Pink Ivory CN36 Flat Wedding Black Summer Purple Evening Satin White Blue Silver 5YqxwxrB00, 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.