Как мне определить, имеет ли активная текстура идентификатор текстуры 0 в GLSL?

#opengl #glsl #textures #lighting

#opengl #glsl #Текстуры #Освещение

Вопрос:

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

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

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

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

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

Комментарии:

1. Что не так с chi ting, это не физика, это компьютерная графика? Использование белой текстуры размером 1×1 — самый простой способ.

Ответ №1:

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

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

Ответ №2:

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

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

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