Операторы сравнения (== и !=) выполняются над всеми типами, кроме массивов. Они сравнивают каждый компонент или член структуры операндов. Результат операции сравнения - логическое значение. Для того чтобы операнды оказались равны, должны совпадать типы операндов, а также значения каждого из компонентов или членов структуры с обеих сторон. Чтобы сравнить покомпонентно векторы, используются функции equal и notEqual.

Скалярные логические значения являются результатом выполнения операторов -«равно» (=), «неравно» (!=), относительных (<,>, <= и >=) и логического «НЕТ» (!) в основном потому, что операторы i f, for и другие ожидают значения такого типа. Результатом выполнения функций типа equal являются векторы из логических значений, которые можно преобразовать в скалярные логические значения с помощью встроенных функций any и all. Например, чтобы выполнить какие-нибудь действия только в случае, если хотя бы один компонент вектора меньше соответствующего компонента другого вектора, нужно написать:

vec4 j, v:
if (any(lessThan(u. v)))

Присваивание (=) требует полного совпадения типов операндов. Присваивать можно любые типы, кроме массивов. Другие операторы присваивания (+=, -=, *= и /=) работают почти так же, как в С, - за одним исключением: а *= b . а = а * b

Выражение а * b должно быть семантически правильным, и тип выражения а * b должен быть таким же, как и тип а. Другие операторы присвоения работают так же.

Тернарный оператор выбора (? : ) работает с тремя операндами-выражениями (выражение]. ? выражение2 : выражениеЗ). Оператор вычисляет первое выражение, результат которого должен быть логическим значением. Если результат true, вычисляется второе выражение, в противном случае вычисляется третье выражение. Всегда вычисляется только один операнд из двух последних, либо второй либо третий, и результаты вычислений должны быть одного и того же типа - любого, кроме массива. Результат всего оператора - это результат вычисленного второго либо третьего выражения.


⇐ Предыдущая| |Следующая ⇒