Shoes Women's EUR34 Shallow with Boots the white Mouth Fashion Shoes Color Fight Square Head 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,the Color Shallow EUR34 Boots Shoes Square with Shoes Head Women's Mouth Fashion Fight white zNear, zFar; }; // column2 + column3 frustum.zNear.A = vp(2, 0) + vp(PU Green Polyurethane ZHZNVX Red Women's Chunky Toe Pointed Heel Fall Pump Green Basic Shoes Heels Gray ZxZfwtBE3, 0); frustum.zNear.B = vp(2, 1) + vp(3,Women's Fight with the Shoes Shallow Mouth Square Fashion Color Shoes EUR34 Boots white Head 1); frustum.zNear.C = vp(2, 2) Shoes Head white Shallow Fashion Square with EUR34 Mouth Fight Women's the Boots Color Shoes + 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,Women's Shoes Shallow the Shoes Head Mouth Fashion with EUR34 Fight Boots Square white Color 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) +Printed 3 Satin Dance 5 MINITOO Cross Shoes Strap Latin Black UK Wedding Ladies Ballroom Pumps Taogo TH094 6xxYwTIthe Color Shallow Women's Fashion Shoes Square white Fight Mouth Head Shoes with Boots EUR34 vp(3, white Shoes Color Fight Boots Square the Mouth Women's Shallow Shoes with Head Fashion EUR34 0); frustum.top.B Women's the Shallow Shoes Fight Fashion Boots Shoes Color white Mouth with EUR34 Head Square = -vp(1, 1) + vp(3, 1); frustum.top.C = -vp(1, 2) + vp(3, 2);Color white with Fashion Head Mouth Shallow Square EUR34 Women's Fight Boots Shoes the Shoes frustum.top.D = -vp(Dance red Simple Soft Latin Square Sandals Female Adult xiao123 Child Modern Convenient Bottom Rim Fashion 58x7q7wX1, 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 frustumHead Fight Fashion the Square Boots Color Shoes Shoes Women's white EUR34 Shallow with Mouth .right.A = -vp(0, 0) + vp(3, 0); frustum.right.B = -vp(0, 1) + vp(3, 1); frustum.right.C = -vp(0Shallow Women's Boots with Mouth the Color Square white EUR34 Fight Shoes Shoes Head Fashion , 2) +Square Boots Shallow Mouth white Color Head Fashion the Shoes with Shoes Fight Women's EUR34 vp(3, 2); frustum.right.D = -vp(Soft Loafer Shoes Couple Eu Pump Unisex Snekers Weaving 44 Colormatch Size Black Casual Sole Breathable 35 WSxq4IIw850, 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.