如何在glClipPlanef中使用坐标?

时间:2010-02-02 10:47:30

标签: iphone opengl-es

我想在OpenGL ES和iPhone SDK中剪切纹理图像中的一些封闭路径区域。

我发现可以使用plane和glClipPlanef函数来完成这样的事情:

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

其中v是const GLfloat坐标数组。

我无法弄清楚如何设置这些坐标以剪切封闭的路径区域?

2 个答案:

答案 0 :(得分:0)

我理解如何使用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);

其中A,B,C,D - plane equation的参数。

如果我们有三个带坐标的点(x1,y1,z1),(x2,y2,z2),(x3,y3,z3)那么

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)

如果您有2D纹理,则需要按如下方式定义点:(x1,y1,0),(x2,y2,0和(x3,y3,1)。这将有效。

希望这将有助于将来。

答案 1 :(得分:0)

在OpenGL 2.0 ES中禁用了

glClipPlanef

enter image description here