Russian Qt Forum
Ноябрь 24, 2024, 01:37
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
2D и 3D графика
>
Проблемы с текстурами в OpenGL
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Проблемы с текстурами в OpenGL (Прочитано 5906 раз)
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Проблемы с текстурами в OpenGL
«
:
Октябрь 16, 2011, 09:18 »
Добрый день
Общая задача поддерживать 2 и более текстур на 1 объекте со всеми типами и наворотами маппинга. (изначально приложение обходилось 1 текстурой).
Сделал так: создаю UV координаты для каждой текстуры и затем использую glTextImage2D и glTetCoordPointer. Это работает, но возникает капитальнейший геморрой: UV seam (шов). Приходится "распиливать" полигоны по шву, с 2 и более текстурами это особенно неприятно.
Как-то "обойти" это дело не удается: объект может и не иметь своих UV, может иметь но пользователь их выключил, и/или UV(W) не плоские. В редакторе (для которого все это делается) пользователь назначает тип наложения и выбирает имедж текстуры, смещения и масштаб подбирает интерактивно. Все наложенные текстуры должны отображаться в окнах preview.
Возвращаясь к злополучному шву: есть ли лучшее ("модерновое") решение?
Спасибо
Записан
xop
Гость
Re: Проблемы с текстурами в OpenGL
«
Ответ #1 :
Октябрь 18, 2011, 11:45 »
Не совсем понятно зачем каждой текстуре свои текстурные координаты. Обычно используется одна развертка на все текстуры. Максимум две, в этом случае основые текстуры по прежнему по первой развертке кладутся, а вторая - для чего-нибудь типа лайтмапы. Соответственно швов немного
«
Последнее редактирование: Октябрь 18, 2011, 11:53 от xop
»
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Проблемы с текстурами в OpenGL
«
Ответ #2 :
Октябрь 18, 2011, 12:19 »
Цитата: xop от Октябрь 18, 2011, 11:45
Не совсем понятно зачем каждой текстуре свои текстурные координаты. Обычно используется одна развертка на все текстуры. Максимум две, в этом случае основые текстуры по прежнему по первой развертке кладутся, а вторая - для чего-нибудь типа лайтмапы. Соответственно швов немного
Простой случай - (записанных) текстурных координат нет (ну такая у пользователя модель). Он хочет наложить напр одну текстуру сферой и еще одну flat'oм. Для меня объем работ точно такой же как если он использовал все 8 или больше - надо как-то создавать для каждой свое UV пр-во. Есть др. ходы - подскажите. Со швами то же самое: от того что их у пользователя немного, мне работы никак не меньше
Записан
xop
Гость
Re: Проблемы с текстурами в OpenGL
«
Ответ #3 :
Октябрь 18, 2011, 13:17 »
Если накладывать текстуры сферой или flatом - то вообще непонятно, откуда взяться швам. А текстурные координаты для таких случаев вообще можно (и обычно так и делают) в шейдере на лету генерить. А развертками - да, от швов обычно никуда не деться, и это обычно уже задача моделлеров оптимизировать развертку так, чтобы было меньше швов. И дублирование вершин в этом случае неизбежно, и является нормой. Ну, по крайней мере когда разверток одна-две - ни к чему плохому это не приводит. Или мы про разные "швы"? Можно конкретную картинку с конкретной проблемой шва и "распиливания" полигонов? Или хотя бы чертеж?
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Проблемы с текстурами в OpenGL
«
Ответ #4 :
Октябрь 18, 2011, 14:11 »
Цитата: xop от Октябрь 18, 2011, 13:17
Если накладывать текстуры сферой или flatом - то вообще непонятно, откуда взяться швам. А текстурные координаты для таких случаев вообще можно (и обычно так и делают) в шейдере на лету генерить. А развертками - да, от швов обычно никуда не деться, и это обычно уже задача моделлеров оптимизировать развертку так, чтобы было меньше швов. И дублирование вершин в этом случае неизбежно, и является нормой. Ну, по крайней мере когда разверток одна-две - ни к чему плохому это не приводит. Или мы про разные "швы"? Можно конкретную картинку с конкретной проблемой шва и "распиливания" полигонов? Или хотя бы чертеж?
Об одних и тех же
Да, я вынужден "расшарить" всех (каждый полигон ссылается на свои вертексы), иначе никак не протолкнуться с UV.. Сфера создает шов (в одном полигоне напр один вертекс мапируется на левую точку имеджа, а другой - на правую). Flat нет, но массивы-то должны сбиваться, поэтому я вынужден добавлять новую геометрию (образующуюся как результат "пиления") во все UV пр-ва. Генерирвать на ходу было бы замечательно т.к. именно это я и делаю в software - но увы, мне надо еще держать Gourand и Flat (тоже с текстурами но без шейдеров). Кстати я не нашел способа как сделать Flat кроме опять-таки "расшарить всех" для того чтобы симитировать полигонные нормали.
Ну ладно, нет так нет, значит вроде иду верным путем
Спасибо за информацию
Записан
xop
Гость
Re: Проблемы с текстурами в OpenGL
«
Ответ #5 :
Октябрь 18, 2011, 14:29 »
Gouraud и flat - это я так понимаю все то же самое, но на фиксированном функционале без использования шейдеров? И плоский и sphere-mapping аппаратно поддерживаются видюхами и очень давно, читайте спецификацию OpenGL 2.1 с 50 страницы (функции glTexGen). Так что это тоже можно на лету и без шейдеров.
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Проблемы с текстурами в OpenGL
«
Ответ #6 :
Октябрь 18, 2011, 16:57 »
Цитата: xop от Октябрь 18, 2011, 14:29
Gouraud и flat - это я так понимаю все то же самое, но на фиксированном функционале без использования шейдеров? И плоский и sphere-mapping аппаратно поддерживаются видюхами и очень давно, читайте спецификацию OpenGL 2.1 с 50 страницы (функции glTexGen). Так что это тоже можно на лету и без шейдеров.
Читал и эту и другие - вот только не очень понял
Везде изложение сразу же сваливается в reflection, но мне это не нужно, цель - текстура на геометрии (view-independent, с поведением UV). Есть ли такое в OpenGL? Также
- что делать с наложением цилиндром ?
- cubic вроде в OpenGL есть (натыкался), но у меня еще 2 урода: "angular" и "vertical cross". Какие к ним есть подходы?
Путь что я выбрал - трудоемкий и корявый, но он имеет тот плюс что выполняется однообразно для всех типов маппинга. Делать "по-всякому" (в зависимости от возможностей OpenGL) дешевле не выходит. Как Вы считаете?
Спасибо
Записан
xop
Гость
Re: Проблемы с текстурами в OpenGL
«
Ответ #7 :
Октябрь 18, 2011, 17:21 »
Изложение сваливается в reflection, потому что эти маппинги делались в железе именно для фейковых отражений. В общем, сделать можно, как - надо разбираться. Насчет однообразного пути - уж лучше делать тогда все на шейдерах. Я серьезно. Держатся почти любым железом, какое сейчас есть. Если совсем все плохо и нужна поддержка старых intelовских карточек - можно использовать ARB-шейдеры - это ассемблер, но в него прекрасно компиляется нвидиевский cg.
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Проблемы с текстурами в OpenGL
«
Ответ #8 :
Октябрь 19, 2011, 17:29 »
Цитата: xop от Октябрь 18, 2011, 17:21
Если совсем все плохо и нужна поддержка старых intelовских карточек - можно использовать ARB-шейдеры - это ассемблер, но в него прекрасно компиляется нвидиевский cg.
Ну так с пользователем не договаривались. Не получается загрузить шейдер - значит просто Gourand. Еще 2 вопроса по OpenGL текстурам
1) Такая ситуация иногда называется "implicit UV". Изначальных (специально подготовленных) UV нет, но есть возможность сохранить объектные координаты как UV. После этого объект напр. сплющен (или др. нелинейное действие). Но поскольку есть UV, текстура "плющится вместе с объектом" а не скользит. Можно ли OpenGL как-то подсунуть такие UV вместо вертексов? (напр для кубика)
2) Есть наложение "пирамидой" - вариация flat с той разницей что координаты умножаются на kz (где z - расстояние по Z до вершины пирамиды). Как это сделать в OpenGL?
Спасибо
Записан
xop
Гость
Re: Проблемы с текстурами в OpenGL
«
Ответ #9 :
Октябрь 19, 2011, 21:34 »
Цитата: Igors от Октябрь 19, 2011, 17:29
Ну так с пользователем не договаривались. Не получается загрузить шейдер - значит просто Gourand. Еще 2 вопроса по OpenGL текстурам
В смысле? Сейчас любое более-менее современное железо держит шейдеры (даже купленное в 2005). У старых интеловских карточек есть проблемы с поддержкой GLSL, но ARB-шейдеры они держат начиная кажется с 910 чипсета. Если надо их поддерживать - пишите на Cg (почти копия HLSL), компилируйте в ARB-ассемблер и используйте. Хоть на интеле, хоть на нвидии, хоть на амд/ати. На любом железе начиная кажется с 2003-2004 года выпуска.
Цитата: Igors от Октябрь 19, 2011, 17:29
1) Такая ситуация иногда называется "implicit UV". Изначальных (специально подготовленных) UV нет, но есть возможность сохранить объектные координаты как UV. После этого объект напр. сплющен (или др. нелинейное действие). Но поскольку есть UV, текстура "плющится вместе с объектом" а не скользит. Можно ли OpenGL как-то подсунуть такие UV вместо вертексов? (напр для кубика)
Да, можно. Указываете ваш сохраненный массив с координатами в качестве текстурных координат при отрисовке.
Цитата: Igors от Октябрь 19, 2011, 17:29
2) Есть наложение "пирамидой" - вариация flat с той разницей что координаты умножаются на kz (где z - расстояние по Z до вершины пирамиды). Как это сделать в OpenGL?
Легко в шейдере. Если без шейдеров - можно задавать матрицы 4x4 для преобразования текстурных координат. Дальше строите соответствующую матрицу преобразовния (матрица перспективной проекции очень похожее преобразование задает) и вперед.
Записан
Страниц: [
1
]
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...