Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Algebra planos

Iniciado por 1cacalvo, 29 de Febrero de 2008, 10:12:38 AM

« anterior - próximo »

1cacalvo

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];

BeRSeRKeR

¿Has probado con el documento de Hartman y Gribb?

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.
¡Si te buscan en nombre de la ley, huye en nombre de la libertad!!

1cacalvo

Muchas gracias no habia leido el paper, pero esta perfectamente explicado...






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.