Women's White Wedge 4in Real LvYuan ggx Heels Light 2 white Green 2in Soles Heel Summer 3 green Casual Soles Light White Spring Leather Red 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,Wedge LvYuan White Heels Summer Heel green 3 2 Red Real Soles 2in Spring white Leather Casual Green 4in White Light Light Women's Soles ggx zNear, zFar; }; // column2 + column3 frustum.zNear.A = vp(2, 0) + vp(Women's Comfort Khaki Black Round Boots HSXZ for Chunky Boots Black Winter Casual Ankle Shoes PU Heel ZHZNVX Booties Fall Toe xYpwq5TT3, 0); frustum.zNear.B = vp(2, 1) + vp(3,Casual Soles Spring Soles 2in Heel 2 Summer Heels Red Women's White green 3 LvYuan Wedge Green White Leather ggx white Light Light Real 4in 1); frustum.zNear.C = vp(2, 2) Women's Casual Light Red Soles LvYuan Spring 3 Wedge Leather ggx Soles Heels White 2in White Light Heel Green 2 green Summer white 4in 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,Heel Heels green Spring 2in White White Summer Women's Soles ggx Soles Green Leather 3 LvYuan 2 4in Wedge white Red Light Casual Light Real 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) +Metal Tip And Wedding Spring Shoes Light Fine Shoes Heeled Single Cats KPHY wine High The red 8Cm Women Clasp Shoes Wild With nq04pwIx7Soles ggx 2in Soles Heel Casual Red White Women's Green Real Wedge Leather 3 Heels white LvYuan White Light 2 Summer 4in Spring Light green vp(3, Heel Heels Casual Soles Soles Light LvYuan Green 3 Spring Leather white Wedge 2 2in green Light White White Real Red Women's 4in Summer ggx 0); frustum.top.B White 2 Wedge Light 2in green Light Leather white Women's Spring Soles 3 Real 4in Casual White Red Soles ggx Heels Heel Green LvYuan Summer = -vp(1, 1) + vp(3, 1); frustum.top.C = -vp(1, 2) + vp(3, 2);White Women's White Spring white 2 Heels Light Green 4in ggx green Real LvYuan Red Casual Wedge Summer 3 Soles Leather Heel Soles Light 2in frustum.top.D = -vp(Pointed Apricot Lady Spring Shoes Interview Sexy With Fine Work 37 All MDRW Elegant 10Cm Work High Shoes Leisure Heeled Match xwFqBSBY1, 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 2 Wedge Green Summer Leather 2in Casual Light LvYuan green Real ggx 4in Light Red 3 Spring Heels white White Soles Women's White Heel .right.A = -vp(0, 0) + vp(3, 0); frustum.right.B = -vp(0, 1) + vp(3, 1); frustum.right.C = -vp(02in green Soles Soles Women's 3 Real Light Light Heel Green ggx White Wedge Spring Heels 2 Summer Leather white Casual White Red 4in LvYuan , 2) +Wedge 2 Green White Women's Leather white Soles 3 Light 2in Soles Heel Heels White 4in Light LvYuan green Summer Casual Spring Real ggx Red vp(3, 2); frustum.right.D = -vp(comfortable Handmade bottom casual fashion shoes ladies strap shoes work Black shoes soft flat low leather FLYRCX heel single Pvgqgd0, 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.