Estoy documentando sobre el Frustum Culling y bueno no parece muy complicado pero mi problema viene al definir los 6 planos de corte.
He visto la implementación de como se consiguen pero no he conseguido encontrar en San GOOGLE la explicación algebraica del porque...
Si teneis algun doc o similar pues estaria agradecido...
MD = GL_MODELVIEW_MATRIX
PROY = GL_PROJECTION_MATRIX
clip[0] = md[0] * proj[0] + md[1] * proj[4] + md[2] * proj[8] + md[3] * proj[12];
clip[1] = md[0] * proj[1] + md[1] * proj[5] + md[2] * proj[9] + md[3] * proj[13];
clip[2] = md[0] * proj[2] + md[1] * proj[6] + md[2] * proj[10] + md[3] * proj[14];
clip[3] = md[0] * proj[3] + md[1] * proj[7] + md[2] * proj[11] + md[3] * proj[15];
clip[4] = md[4] * proj[0] + md[5] * proj[4] + md[6] * proj[8] + md[7] * proj[12];
clip[5] = md[4] * proj[1] + md[5] * proj[5] + md[6] * proj[9] + md[7] * proj[13];
clip[6] = md[4] * proj[2] + md[5] * proj[6] + md[6] * proj[10] + md[7] * proj[14];
clip[7] = md[4] * proj[3] + md[5] * proj[7] + md[6] * proj[11] + md[7] * proj[15];
clip[8] = md[8] * proj[0] + md[9] * proj[4] + md[10] * proj[8] + md[11] * proj[12];
clip[9] = md[8] * proj[1] + md[9] * proj[5] + md[10] * proj[9] + md[11] * proj[13];
clip[10] = md[8] * proj[2] + md[9] * proj[6] + md[10] * proj[10] + md[11] * proj[14];
clip[11] = md[8] * proj[3] + md[9] * proj[7] + md[10] * proj[11] + md[11] * proj[15];
clip[12] = md[12] * proj[0] + md[13] * proj[4] + md[14] * proj[8] + md[15] * proj[12];
clip[13] = md[12] * proj[1] + md[13] * proj[5] + md[14] * proj[9] + md[15] * proj[13];
clip[14] = md[12] * proj[2] + md[13] * proj[6] + md[14] * proj[10] + md[15] * proj[14];
clip[15] = md[12] * proj[3] + md[13] * proj[7] + md[14] * proj[11] + md[15] * proj[15];
// Calculate the right side of the frustum.
Frustum[0].a = clip[3] - clip[0];
Frustum[0].b = clip[7] - clip[4];
Frustum[0].c = clip[11] - clip[8];
Frustum[0].d = clip[15] - clip[12];
// Calculate the left side of the frustum.
Frustum[1].a = clip[3] + clip[0];
Frustum[1].b = clip[7] + clip[4];
Frustum[1].c = clip[11] + clip[8];
Frustum[1].d = clip[15] + clip[12];
// Calculate the bottom side of the frustum.
Frustum[2].a = clip[3] + clip[1];
Frustum[2].b = clip[7] + clip[5];
Frustum[2].c = clip[11] + clip[9];
Frustum[2].d = clip[15] + clip[13];
// Calculate the top side of the frustum.
Frustum[3].a = clip[3] - clip[1];
Frustum[3].b = clip[7] - clip[5];
Frustum[3].c = clip[11] - clip[9];
Frustum[3].d = clip[15] - clip[13];
// Calculate the far side of the frustum.
Frustum[4].a = clip[3] - clip[2];
Frustum[4].b = clip[7] - clip[6];
Frustum[4].c = clip[11] - clip[10];
Frustum[4].d = clip[15] - clip[14];
// Calculate the near side of the frustum.
Frustum[5].a = clip[3] + clip[2];
Frustum[5].b = clip[7] + clip[6];
Frustum[5].c = clip[11] + clip[10];
Frustum[5].d = clip[15] + clip[14];
¿Has probado con el documento de Hartman y Gribb (http://www2.ravensoft.com/users/ggribb/plane%20extraction.pdf)?
Aunque la implementación que tienes se parece a la que describe en el paper, por lo que es posible que sí lo hayas leído.
Saludos.
Muchas gracias no habia leido el paper, pero esta perfectamente explicado...