Как вы уже заметили, семейство функций texelFetch()
обращается к определенному текселю по фактическим целочисленным координатам текселя, в которых указаны данные изображения.
Напротив, отображение между текстурными координатами, используемыми для семейства texture()
функций GLSL, и фактическими координатами текселей немного сложнее.
Во-первых, координаты текстуры определяются как числа с плавающей запятой, и концептуально выборка текстур представляет собой оценку непрерывной 1-, 2- или 3D-функции без доступа к дискретному массиву. Режимы фильтрации, конечно же, определяют, какие значения вы получите при сэмплировании между точками данных, представленными в самой текстуре. Вы должны знать, что первое отличие состоит в том, что выборка текстуры в общем случае не означает, что адресуется один тексел, а используется несколько текселей, и режим фильтра (а также другие обстоятельства, такие как производные экранного пространства от tex coords) определяет, какие тексели должны быть извлечены во время работы.
Текскоорды для «обычных» 2D-текстур определяются таким образом, что (0,0) определяет нижний левый угол нижнего левого текселя, а (1,1) верхний правый угол верхнего правого пикселя. . Обратите внимание, что это определение подразумевает, что если вы хотите произвести выборку точно в центре текселя для целочисленных координат текселя (i,j) с 0 ‹= i ‹= texWidth -1 и 0 ‹= j ‹= texHeight -1, у вас будет использовать координаты текстуры ( (i+0.5)/texWidth, (j+0.5)/texHeight).
Если указаны координаты текстуры за пределами диапазона [0,1], для определения того, как это сопоставляется с диапазоном, используется режим переноса текстуры. В основном у вас есть возможность зажать их или повторить текстуру (зеркально и не зеркально).
Или это еще сложнее и как-то определяется в свойствах текстуры?
Режимы фильтрации и переноса являются частью состояния семплера. GLES 3 поддерживает объекты сэмплера, которые позволяют указывать состояние сэмплера независимо от объекта текстуры. В традиционном GL объекты текстур содержат состояние сэмплера. Объекты сэмплера позволяют вам при желании переопределить это состояние.
Здесь В нем говорится: "Координаты текстуры могут быть нормализованы или в пространстве текселей". Но я настроен скептически, так как не вижу места для нормализованной текстуры.
Что ж, это относится к настольному GL, а не к GLES 3. Ссылка, которую вы дали, фактически объясняет это сразу после абзаца, из которого вы цитируете. Текстуры прямоугольников используют отображение, где [0, ширина) x [0, высота) представляет все изображение в координатах текстуры, а не в нормализованном диапазоне [0,1]. Но в ES3 прямоугольные текстуры не поддерживаются, так что здесь это не имеет значения.
person
derhass
schedule
12.07.2015