2010-02-02 4 views
0

Je souhaite découper une zone de chemin fermé à partir d'une image de texture dans OpenGL ES et iPhone SDK.Comment utiliser les coordonnées dans glClipPlanef?

Je trouve que cela peut être fait avec des avions et la fonction glClipPlanef quelque chose comme ceci:

glClipPlanef(GL_CLIP_PLANE0, v); 
glEnable(GL_CLIP_PLANE0); 
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); 
glDisable(GL_CLIP_PLANE0); 

où v est un tableau de const GLfloat de coordonnées.

Je ne peux pas comprendre comment régler ces coordonnées pour couper la zone de la voie fermée?

+0

[Cela ne fonctionne pas dans OpenGL ES 2.0] (http://stackoverflow.com/questions/7408855/clipping-planes-in-opengl-es-2-0) – bobobobo

Répondre

0

Je comprends comment utiliser glClipPlanef:

const GLfloat v[] = { 
    A, B, C, -D 
}; 

// bind to clip plane 
glClipPlanef(GL_CLIP_PLANE0, v); 
// enabled it 
glEnable(GL_CLIP_PLANE0); 
// some draw logic 
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); 
// clip area 
glDisable(GL_CLIP_PLANE0); 

où A, B, C, D - paramètres de plane equation.

Si nous avons trois points avec coords (x1, y1, z1), (x2, y2, z2), (x3, y3, z3) puis

A = y1 * (z2 - z3) + y2 (z3 - z1) + y3 (z1 - z2) 
B = z1 * (x2 - x3) + z2 (x3 - x1) + z3 (x1 - x2) 
C = x1 * (y2 - y3) + x2 (y3 - y1) + x3 (y1 - y2) 
-D = x1 * (y2*z3 - y3*z2) + x2 * (y3*z1 - y1*z3) + x3 * (y1*z2 - y2*z1) 

Si vous avez une texture 2D vous aurez besoin de définir des points comme suit: (x1, y1, 0), (x2, y2, 0 et (x3, y3, 1) cela fonctionne

Espérons que cela aidera quelqu'un à l'avenir

0

... glClipPlanef a été désactivé dans OpenGL 2.0 ES

enter image description here

Questions connexes