расчет площади поверхности - PullRequest
1 голос
/ 12 июля 2011

Я использую glDrawArrays (GL_POINTS, ...) для рисования гармонической волны.Я хотел бы знать порядок, в котором поверхности (треугольники?) Генерируются openGL при рендеринге на основе вершин и таким образом вычислять площадь поверхности?Могу ли я сделать это, и если да, то как.


Я постараюсь объяснить это лучше

У меня есть двумерный массив значений и я выполняю на нем UV-отображение. (Я генерирую гармоническую волну) и нарисуйте поверхность, принятую с помощью glDrawArrays.Я хочу рассчитать площадь поверхности, которую я визуализирую.Я думаю, что я должен «перевести» задачу, чтобы было проще для такого вычисления, создав сетку треугольников, которая подходит для рисования точек - это упростит мой расчет.

Ответы [ 2 ]

2 голосов
/ 12 июля 2011

Я использую glDrawArrays (GL_POINTS, ...) для рисования гармонической волны.

Точки не имеют поверхности.

Я хотел бы знать,порядок, в котором поверхности (треугольники?) генерируются openGL при рендеринге на основе вершин и таким образом вычисляются площади поверхности?Могу ли я это сделать, и если да, то как.

OpenGL не генерирует трагические ошибки.Растеризует треугольники, которые вы отправляете.В том же порядке, в котором вы их указали.glDrawArrays(mode, first, count) ведет себя точно так же, как

myDrawArrays(GLenum mode, GLuint first, GLuint count)
{
    GLuint *indices = malloc(count * sizeof(GLuint));
    /* just assume malloc never fails, OpenGL doesn't have to alloc here, of course) */
    for(int i=0; i<count; i++)
        indices[i] = first + i;
    glDrawElements(mode, count, GL_UNSIGNED_INT, indices);
    free(indices);
}

Примитивы растеризуются в указанном порядке.

Таким образом, вы хотите знать площадь поверхности, но рисуететочки.Как уже говорилось, точки (математически) не имеют поверхности.Однако они охватывают как минимум один (суб) пиксель.Так может ли быть так, что вы действительно хотите знать покрытие пикселей ?

Тогда OpenGL предоставляет вам метод, называемый «запрос окклюзии», с помощью которого он возвращает вам, сколько (screen / framebuffer)пиксели были затронуты путем рисования примитивов в запросе.

http://www.opengl.org/registry/specs/ARB/occlusion_query.txt

1 голос
/ 12 июля 2011

Этап затенения геометрии содержит информацию о нарисованном многоугольнике, поэтому вы можете рассчитать количество поверхности оттуда. Чтобы получить ее сумму, вы можете сделать рендеринг в объект кадрового буфера 1x1 R_32F с аддитивным смешиванием, а затем прочитать значение в системную память.

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