Имитировать полигональную разметку с помощью OpenGL ES на iOS

#iphone #ios #opengl-es #texture-mapping

#iPhone #iOS #opengl-es #отображение текстур

Вопрос:

Я хочу заполнить вогнутый многоугольник простым повторяющимся рисунком. Я уже могу правильно нарисовать полигон, к сожалению, у меня возникают проблемы с его заполнением. В OpenGL я мог бы легко сделать это с помощью POLYGON_STIPPLE. Однако эта функциональность недоступна в OpenGL ES.

Я подумал, что мне, вероятно, нужно использовать текстуры вместо разметки. Однако я не могу понять, как вычислить правильные координаты текстуры, поскольку все треугольники имеют совершенно разные размеры, но я все равно хочу, чтобы шаблон хорошо подходил друг к другу.

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

Ответ №1:

Вычисление координат текстуры не так сложно, как я думал. Заполнение многоугольника шаблоном может быть выполнено следующим образом:

  1. Загрузите текстуру (из изображения или определите массив байтов)
  2. Привязать текстуру
  3. Установите параметр текстуры так, чтобы текстура повторялась. Это приведет к тому, что для каждой координаты больше 1 текстура будет просто повторяться снова и снова.

     glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT );
    glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT );
      
  4. Вычисление координат текстуры. Каждая вертикальная координата c соответствует координате текстуры, вычисляемой следующим образом: (c.x / texture.width, c.y / texture.высота)