2014-10-27 7 views
0

Я использую opengl es 2.0 на iphone рендеринг примитива, я использую шейдер и glFramebufferTexture2D для текстуры, но результаты не совпадают, и я ожидаю, что все координаты находятся в смятении, вершинные данные, которые я даю, это V0 (-1, -1, -1) V1 (0, -1,01), V2 (-1,0, -1) Я ожидал, что результат должен быть первым изображением, подобным этому, но результат действительно похож на второй случай iemge. Я нашел всю систему координат, как эти зеленые стрелки вдоль склада того же самого, пожалуйста, скажите мне, как это верно? first imageСистема координат OpenGL ES 2.0

second image

хорошо, я нашел проблему, если я не использую glFramebufferTexture2D, этот результат является правильным, как третьего изображения .so, кто может сказать мне, почему?

third

ответ

0

Ну, истинная система координат в OpenGL работает так, что слева и внизу находятся на -1, справа и сверху находятся на 1. Следующая вещь рендер буфер происхождения также в «нижней -левый угол. Итак, что происходит, когда вы представляете изображение на экране, которое хотите, чтобы Y-координата была инвертирована, чтобы верхняя часть была равна -1 или, скорее, еще равна 0, но это только для отображения.

Как и для текстур, вы не должны пытаться инвертировать его, а сохранить начало в левой части слева. Вы должны понимать, что после рисования текстуры эти пиксели представляют собой просто данные RGBA-пикселя, и когда текстура повторно используется для отображения (или если вы читаете эти пиксели), они будут перевернуты с естественной точки зрения.

Я не уверен, что все это достаточно логично, но то, что вы обычно делаете, инвертирует сцену, так что вы видите правильно, но все это не имеет никакого отношения к фактическому порядку буфера на графическом процессоре. Например, если бы вы могли просто заменить RGBA-данные первого пикселя в буфере, этот пиксель фактически был бы в нижней левой части экрана, а не в верхнем левом углу.

Таким образом, лучше всего поддерживать порядок вещей openGL при работе с FBO и инвертировать сцену только при рисовании в буфер, который будет отображаться на экране.

+0

Теперь вопрос в том, что если я направляю рендеринг, и я ожидал того же результата, если я визуализую текстуру (Use glFramebufferTexture2D) и позицию внешнего вида - это не то же самое, что я ожидал. – HelloWorld