Имитация многоугольника с помощью OpenGL ES на iOS

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

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

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


person gebirgsbärbel    schedule 09.10.2011    source источник


Ответы (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.height)

person gebirgsbärbel    schedule 31.10.2011