Ограничение чертежа прямоугольником в OpenGLES

#opengl-es

#opengl-es

Вопрос:

Мне нужно ограничить рисование объекта прямоугольником. Я не могу просто изменить видовой экран, чтобы он соответствовал прямоугольнику, потому что матрица ModelView (которая должна изменять прямоугольник, но не содержимое) может не совпадать. Решение, которое могло бы сработать, — это отрисовать FBO, соответствующий прямоугольнику, затем вывести FBO на экран, но, похоже, это происходит медленно. Есть ли лучший вариант для этого?

Ответ №1:

Если я вас правильно понял, glScissor должна быть той функцией, которую вы ищете. Это обрезает рендеринг до выбранного подпрямоугольника окна просмотра. Это не изменяет область просмотра. Таким образом, объекты занимают одинаковый размер на экране, это просто не позволяет вам рисовать какие-либо пиксели за пределами области сечения. Если это не то, что вы хотите, и вы хотите, чтобы подпрямоугольник содержал всю сцену и, следовательно, ваши объекты уменьшались, то изменение области просмотра является решением выбора.

РЕДАКТИРОВАТЬ: Если вы хотите, чтобы прямоугольник был трансформируемым и особенно поворотным (и, следовательно, больше не был прямоугольником на экране), то рендеринг в FBO и использование его в качестве текстуры на квадрате, вероятно, является лучшим решением. В противном случае вы, вероятно, могли бы также просто изменить координаты вершин после проекции, таким образом, умножив матрицу преобразования целевого прямоугольника на матрицу проекции и используя это как новую матрицу проекции, но я не совсем уверен в этом (но, по крайней мере, что-то подобное должно это сделать.

Комментарии:

1. glScissors действительно намного лучше, чем временное изменение области просмотра, спасибо. Но можно ли в любом случае определить область в мировых координатах вместо координат вида? Если нет, я думаю, я просто выберу текущую матрицу и преобразоваю ее для просмотра, что кажется обходным решением.

2. На данный момент прямоугольник не будет поворачиваться, было бы неплохо поработать и с rotatable, но поскольку он предназначен для мобильного приложения, накладные расходы на FBO будут слишком велики.