Как использовать координаты в glClipPlanef? - PullRequest
0 голосов
/ 02 февраля 2010

Я хочу вырезать некоторую область замкнутого контура из изображения текстуры в OpenGL ES и iPhone SDK.

Я обнаружил, что это можно сделать с помощью плоскостей и функции glClipPlanef примерно так:

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

где v - постоянный массив координат GLfloat.

Не могу понять, как установить эти координаты, чтобы обрезать замкнутую область пути?

Ответы [ 2 ]

0 голосов
/ 30 ноября 2012

glClipPlanef было отключено в OpenGL 2.0 ES.

enter image description here

0 голосов
/ 03 февраля 2010

Я понимаю, как использовать 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 - параметры уравнения плоскости .

Если у нас есть три точки с координатами (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). Это будет работать.

Надеюсь, это поможет кому-нибудь в будущем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...