Как остановить шейдер от искажения текстуры - PullRequest
0 голосов
/ 02 июня 2019

Я пытаюсь научиться использовать шейдеры и использовать GLSL. Один из шейдеров работает, но искажает текстуру спрайта, над которым он работает. Я делаю все это на SFML.

Искаженная текстура слева, фактическая текстура справа:

img

Проблема исходит от этой строки

Когда я начинал, текстура рендерилась вверх ногами, но вычитание y-компонента кординатов из 1 решило эту проблему. Строка, вызывающая проблему:

vec2 texCoord = (gl_FragCoord.xy / sourceSize.xy);

Где sourceSize - это равномерное прохождение в разрешении чего-либо как vec2. Я передавал различные значения в это и получал различные искаженные версии текстуры. Мне было интересно, есть ли какое-то отношение, чтобы передать или что-то, чтобы избежать этого искажения.

Размер текстуры в пикселях: 512x512 Передается в значениях для изображения выше: 512x512

Shader


uniform sampler2D       source;
uniform vec2            sourceSize;
uniform float           time;


void main( void )
{   
     vec2 texCoord = (gl_FragCoord.xy / sourceSize.xy); //Gets the pixel position in a range of 0.0 to 1
     texCoord = vec2 (texCoord.x,1.0-texCoord.y);//Inverts the y co ordinate


     vec4 Color = texture2D(source, texCoord);//Gets the current pixture colour


     gl_FragColor = Color;//Output
}

1 Ответ

1 голос
/ 06 июня 2019

Нашел решение.Размещение здесь, если другим нужна помощь.Изменение

vec4 Color = texture2D(source, texCoord);//Gets the current pixture colour

на

vec4 Color = texture2D(source, gl_TexCoord[0].xy);//Gets the current pixture colour

Исправит эффект искажения.

...