Трафарет рендера на неизвестную изогнутую поверхность

Желание наклеить несколько нерегулярных текстур на изогнутую поверхность (меш с вершинами XYZ и UV, указанными на каждой). Я загружаю сетку из файла модели, и у меня нет априорных знаний о поверхности... все, что мы знаем, это то, что у нее будет "разумное" ультрафиолетовое отображение. Хотите выбрать несколько ультрафиолетовых областей и применить к ним текстуры. Каждая область определяется ограничивающим поли в координатах УФ. Не знаю эквивалента xyz poly в этом случае, или я думаю, что ответ будет простым.

У нас это работает для плоских поверхностей, а также для простых цилиндрических поверхностей (которые мы аппроксимируем как ряд плоских полос, сглаженных путем выбора нормалей в качестве средних). В обоих случаях мы знаем уникальное отображение от uv до xyz, поэтому мы настроили буфер трафарета, чтобы ограничить рисование до желаемой области uv, рисуя эквивалентный xyz poly в буфер трафарета перед привязкой текстуры и рисованием реальной поверхности.

Мы также используем прозрачность rgba внутри текстур при удалении их на поверхность. Как правило, каждая текстурированная область представляет собой небольшой повернутый прямоугольник, поэтому мы рисуем четыре вершины в буфере трафарета, затем используем матрицу текстуры, чтобы повернуть ее, и используем прозрачность rgba внутри текстуры, чтобы гарантировать применение только правой части текстуры. Это все работает хорошо.

Хотелось бы повторно использовать наш рабочий код, но теперь примените эти текстуры к произвольной криволинейной поверхности / сетке. Мы загружаем и рисуем эти модели и уже можем применять текстуры к целым граням [т.е. уф изменяется от (0,0) до (1,1) ]. Теперь мы хотим расширить это и применить "размещенные" текстуры к областям каждой поверхности.

Мысль о том, что можно нарисовать uv poly в буфере трафарета напрямую, даже не зная эквивалентного xyz poly... тогда сработает весь существующий код. Возможно, можно использовать какой-то трюк, такой как объект буфера кадра, и сделать начальную отрисовку трафаретной поли для этого, а затем использовать ее в качестве трафарета во время "реальной" прорисовки сетки с криволинейной поверхностью. Это был бы хороший подход? Или есть лучший способ?

Любые советы или ссылки на релевантные образцы приветствуются... PS Посмотрел эти темы... вроде как актуальная, но не совсем та же проблема, я думаю...

Привязка буфера рендеринга трафарета к буферу кадров в opengl

Визуализация буфера трафарета для текстуры

В настоящее время я смотрю на какой-то рабочий код настройки / использования FBO, который у меня есть для закадрового отображения теней, и пытаюсь заставить его работать в этой, казалось бы, более простой ситуации. Немного неясно, зачем нужны вызовы setup gl... Я не совсем понимаю, как это настроить. Вот выдержка из установки FBO аппаратного теневого копирования с вырезанными битами и?? добавил... любая помощь по правильной последовательности здесь ценится.

glBindTexture(GL_TEXTURE_2D, tex); 
?? not
::glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT32, shadowsize, shadowsize, 0, GL_DEPTH_COMPONENT, GL_UNSIGNED_INT, NULL);
?? but a more normal binding approp to drawing RGBA textures 
::glBindTexture(GL_TEXTURE_2D, 0); 
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, m_Framebuffer); 

// Attach everything, tell fbo there will be a drawbuffer, unlike shadows tex draw 
// ?? use GL_COLOR_ATTACHMENT0_EXT 
glDrawBuffer(GL_NONE); 
// no color buffer dest...
??wrong glReadBuffer(GL_NONE); 
// no color buffer src 
?? glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT, GL_TEXTURE_2D, tex, 0); 
//??

Замечания: tex, m_Frambuffer являются ints, правильно расположил textureid и framebuffer, думаю, что бит в порядке. Мои основные моменты путаницы

  1. Кажется, что код делает glBindTexture, glTexImage2D, glBindTexture к 0: правильно ли выпускать это рано?
  2. Требуются вызовы glDrawBuffer + glReadBuffer?

0 ответов

Другие вопросы по тегам