Сравните 3 вектора glsl

#if-statement #glsl #fragment-shader

Вопрос:

Я создал пример кода в glsl и использую if(diffuse.rgb > vec3(1)) его, и он выдает ошибку «невозможно сравнить вектор или матрицы». и если я сделаю это if(diffuse.rgb == vec3(1)) , он будет работать без ошибок, спасибо.

Ответ №1:

Упорядочение сравнений и сравнение на равенство — это не одно и то же. Легко понять, что значит, когда вектор равен/не равен другому. Но что может привести к тому, что вектор будет «меньше» другого? Вы сравниваете расстояние от нулевой точки пространства? Вы сравниваете каждый компонент по отдельности? Если да, то что произойдет, если одних компонентов меньше, а других не меньше?

GLSL имеет векторные реляционные функции для работы с этими различными обстоятельствами. Если вопрос, который вы хотите задать, «является ли какой-либо из них больше 1», то вы можете сделать это с any(greaterThan(diffuse.rgb, vec3(1))) помощью . Если вы хотите спросить «все ли они больше 1″, вы используете all(greaterThan(diffuse.rgb, vec3(1))) .