Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- - (void) calculate
- {
- GLfloat clip[16];
- glGetFloatv(GL_PROJECTION_MATRIX, clip);
- top.n.x = clip[ 3] - clip[ 1];
- top.n.y = clip[ 7] - clip[ 5];
- top.n.z = clip[11] - clip[ 9];
- top.d = clip[15] - clip[13];
- bottom.n.x = clip[ 3] + clip[ 1];
- bottom.n.y = clip[ 7] + clip[ 5];
- bottom.n.z = clip[11] + clip[ 9];
- bottom.d = clip[15] + clip[13];
- left.n.x = clip[ 3] + clip[ 0];
- left.n.y = clip[ 7] + clip[ 4];
- left.n.z = clip[11] + clip[ 8];
- left.d = clip[15] + clip[12];
- right.n.x = clip[ 3] - clip[ 0];
- right.n.y = clip[ 7] - clip[ 4];
- right.n.z = clip[11] - clip[ 8];
- right.d = clip[15] - clip[12];
- front.n.x = clip[ 3] + clip[ 2];
- front.n.y = clip[ 7] + clip[ 6];
- front.n.z = clip[11] + clip[10];
- front.d = clip[15] + clip[14];
- back.n.x = clip[ 3] - clip[ 2];
- back.n.y = clip[ 7] - clip[ 6];
- back.n.z = clip[11] - clip[10];
- back.d = clip[15] - clip[14];
- top.n = normalize(top.n);
- bottom.n = normalize(bottom.n);
- left.n = normalize(left.n);
- right.n = normalize(right.n);
- front.n = normalize(front.n);
- back.n = normalize(back.n);
- }
- - (bool) pointInFrustum: (vec3) p withRadius: (float) r
- {
- float topDistance = dot(top.n, p) + top.d;
- float bottomDistance = dot(bottom.n, p) + bottom.d;
- float leftDistance = dot(left.n, p) + left.d;
- float rightDistance = dot(right.n, p) + right.d;
- if(topDistance < 0) return false;
- if(bottomDistance < 0) return false;
- if(leftDistance < 0) return false;
- if(rightDistance < 0) return false;
- return true;
- }
Add Comment
Please, Sign In to add comment