У меня есть программа, в которой мне нужно применить 2-мерную текстуру (простое изображение) к поверхности, сгенерированной с помощью алгоритма марширующих кубов. У меня есть доступ к геометрии, и я могу относительно легко добавлять текстурные координаты, но лучший способ создать координаты - это ускользнуть от меня.
Каждая точка в томе представляет отдельную единицу данных, и каждая единица данных может иметь разные свойства. Чтобы упростить вещи, я рассматриваю их сортировку по «типам» и присвоение каждому типу текстуры (или части одного большого текстурного атласа).
Моя проблема в том, что я понятия не имею, как генерировать соответствующие координаты. Я могу сохранить расположение текстуры типа в классе типов и использовать его, но тогда швы будут ужасно растянуты (если две соседние точки используют разные части атласа). Если возможно, я бы хотел смешать текстуры на швах, но я не уверен, что это лучший способ сделать это. Смешивание необязательно, но мне нужно как-то текстурировать вершины. Можно, но нежелательно, разбивать геометрию на части для каждого типа или дублировать вершины для целей текстурирования.
Я хотел бы по возможности избегать использования шейдеров, но при необходимости я могу использовать вершинный и / или фрагментный шейдер для смешивания текстур. Если бы я использовал шейдеры, какой бы самый эффективный способ сказать, что это текстура или порция для сэмплирования? Кажется, что передача типа через параметр будет самым простым, но возможно медленным.
Мои объемы относительно малы, 8-16 точек в каждом измерении (я уменьшаю их, чтобы ускорить генерацию, но на данный момент их много на экране). Я кратко подумал о том, чтобы сделать изоповерхность в два раза больше разрешения объема, чтобы у каждой точки было больше вершин (8 в теории), что может упростить текстурирование. Не похоже, что это облегчило бы смешивание.
Для построения поверхностей я использую библиотеку визуализации для OpenGL и его движущихся кубов и системы томов. У меня хорошо сгенерирована геометрия, просто нужно выяснить, как ее текстурировать.
Есть ли способ сделать это эффективно, и если да, то что? Если нет, у кого-нибудь есть идея лучшего способа обработки текстур тома?
Редактировать : Отметим, что текстура - это не просто градиент цветов. Это на самом деле текстура, обычно с узорами. Отсюда и сложность его отображения, градиент был бы тривиальным.
Редактировать 2: Чтобы прояснить проблему, я собираюсь добавить несколько примеров. Они могут просто запутать вещи, поэтому примите во внимание все выше определенного факта, и это просто помощь, если они могут.
Моя геометрия всегда в кубах (загружается, генерируется и сохраняется в кубах). Если форма влияет на возможные решения, вот и все.
Мне нужно применить текстуры, состоящие из узоров и / или цветов (уникальных в зависимости от «типа» точки) к геометрии, в технике, похожей на разбрызгивание, сделанное для ландшафта (однако это не рельеф, однако, поэтому я не знаю, можно ли использовать одни и те же методы).
Шейдеры - это быстрое и простое решение, хотя я хотел бы избежать их, если это возможно, как я упоминал ранее. Что-то пригодное для использования в конвейере с фиксированными функциями предпочтительнее, в основном для небольшого увеличения совместимости и времени разработки. Поскольку это незначительное увеличение, я буду использовать шейдеры и многопроходный рендеринг, если необходимо.
Не уверен, что нужны какие-либо другие разъяснения, но я буду обновлять вопрос по мере необходимости.