GLSL векторы вопросов - PullRequest
       12

GLSL векторы вопросов

1 голос
/ 22 марта 2012

В синтаксисе OpenGL GLSL есть ли разница между компонентами вектора? Я имею в виду, что для данного vec3 у xyzw, rgba и stpq есть какие-либо реальные различия между ними или это просто помощник? Поэтому, если я установлю значение цвета в vec3, я предполагаю, что хотя для ясности чтения я буду использовать rgba, xyzw даст те же значения, верно?

Ответы [ 3 ]

3 голосов
/ 22 марта 2012

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

РЕДАКТИРОВАТЬ: Приведенный выше комментарий относится к объединениям в целом (C / C ++), однако случай в GLSL может быть другим.Ссылка: http://www.opengl.org/wiki/GLSL_Types#Swizzling гласит:

"Вы можете использовать xyzw, rgba (для цветов) или stpq (для координат текстуры). Эти три набора не имеют фактической разницы; они простосинтаксический сахар. "

Так что, как упоминалось в комментарии @tito, это всего лишь синтетический сахар, и его можно смешивать.(хотя не смешанный в одном вызове, например, xyga недопустим)

2 голосов
/ 22 марта 2012

Я думаю, что это просто помощник, так что

vec.xyzw = vec.rgba = vec.stpq 

и так далее. Вы можете использовать тот набор, который вам нужен, вы просто не можете смешивать набор, как

vec3 pos;
pos.xgb = vec3(1,1,1);  // not valid do to mixing the sets
0 голосов
/ 25 мая 2017

С Kronos.org - Тип данных (GLSL):

Вы можете использовать xyzw, rgba (для цветов) или stpq (для координат текстуры).Эти три набора не имеют фактической разницы;они просто синтаксический сахар.https://www.khronos.org/opengl/wiki/Data_Type_(GLSL)#Vectors

Это одна из многих удобных функций, предлагаемых GLSL, чтобы сделать манипуляции с векторами более гибкими, например Swizzling .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...