Используя opengl, как мне объединить фоновое изображение и меньшую искаженную текстуру? - PullRequest
0 голосов
/ 13 ноября 2009

Я пытаюсь создать эффект растягивания изображения на iphone. Я делаю массив вершин и смещаю данные текстуры для каждого индекса в пределах произвольного радиуса фонового изображения. Затем сделайте следующие вызовы для отображения:

int n = gridSize_.x * gridSize_.y;
glEnableClientState( GL_VERTEX_ARRAY);
glEnableClientState( GL_TEXTURE_COORD_ARRAY );
glVertexPointer(3, GL_FLOAT, 0, vertices);
glTexCoordPointer(2, GL_FLOAT, 0, texCoordinates);
glDrawElements(GL_TRIANGLES, n*6, GL_UNSIGNED_SHORT, indices);

//if(num_myindices > 0)
// glDrawElements(GL_TRIANGLES, num_myindices*6, GL_UNSIGNED_SHORT, myindices);
glDisableClientState(GL_VERTEX_ARRAY );
glDisableClientState( GL_TEXTURE_COORD_ARRAY );

Моя проблема в том, что край растянутой области выглядит очень изменчивым с относительно небольшим размером сетки, например, 32x32 или даже 64x64. Чем больше, тем плавнее, но намного медленнее.

Поэтому я попытался добавить копию фонового изображения и ограничил массив вершин только затронутыми индексами. Я использую гораздо меньший размер сетки, но для меньшей площади. Код для рисования выше теперь выглядит так:

//glDrawElements(GL_TRIANGLES, n*6, GL_UNSIGNED_SHORT, indices);
if(num_myindices > 0)
glDrawElements(GL_TRIANGLES, num_myindices*6, GL_UNSIGNED_SHORT,myindices);

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

У кого-нибудь есть советы, как эффективно комбинировать рисование изображений?

Я планирую создать 2-й простой массив вершин для фона и вызвать glDrawArray непосредственно перед моим оператором if, чтобы все рисование выполнялось в одном методе. Это правильный путь? Есть ли способ лучше? Должны ли все данные изображения быть как-то объединены в 1 простой массив вершин?

1 Ответ

0 голосов
/ 20 августа 2011

Нарисуйте фон на одном наборе примитивов.

Нарисуйте "зачарование" на втором наборе примитивов, ближе к камере (если вы используете ортогональную проекцию, то ее значение меняется на одно измерение).

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

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

...