Как мне узнать, является ли активная текстура идентификатором текстуры 0 в GLSL? - PullRequest
5 голосов
/ 30 мая 2011

У меня есть модельные активы, которые не текстурированы, и я устал от рендеринга их как черных без освещения. Это потому, что если текстурный идентификатор 0 связан, и я спрашиваю сэмплер, он говорит мне, что он черный. Позже приводит к 0 * освещению, делающему весь объект черным без освещения. В идеале мне бы хотелось, чтобы он был цветным, матерелированным и освещенным (что произойдет, если мы не умножим его на 0)

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

У меня также есть возможность связать белую текстуру, выдвинув белый пиксель и настроить ее, например, на обертывание, но это похоже на «Chi Ting».

Примечание. Действительная текстура может вернуть черный цвет, поэтому мы не можем просто игнорировать чтение черной текстуры. ну, мы могли бы, но это не выглядело бы хорошо. В настоящее время мы не используем никаких буферных объектов, просто устарел метод glBegin() glEnd() со списками отображения.

Любые другие идеи будут оценены.

Ответы [ 2 ]

6 голосов
/ 30 мая 2011

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

Если вы действительно беспокоитесь о скорости, объедините ваши текстуры в одну, оставляя небольшую белую область для нетекстурированных деталей.Изменение texCoords намного быстрее, чем изменение текстур или униформы.

2 голосов
/ 30 мая 2011

В моих собственных попытках изучения openGL я использовал булеву форму, как вы предложили.

Имеет смысл, что использование текстуры или наличие фиксированного цвета является свойством каждого объекта модели;поэтому установка этого свойства в шейдере для каждого объекта с помощью униформы кажется логичной, без «обмана»!

Если это заставляет вас чувствовать себя лучше, вы можете использовать текстуру (если она есть) как свойство вашегообъект и установить униформу, основываясь на ее наличии или отсутствии, вместо дублирования информации, имея свойство текстуры и текстурированный / не текстурированный флаг.

...