У меня есть небольшая программа, над которой я работаю для рендеринга спрайтов с помощью 2D-преобразований, ссылка здесь .Моя проблема в том, что я пытаюсь визуализировать квадрат 100 на 100 пикселей, но он растягивается в прямоугольник.Я абсолютно не понимаю, что такое код, вызывающий нарушение, но вот некоторые важные части.
const position = gl.createBuffer()
gl.bindBuffer(gl.ARRAY_BUFFER, position)
gl.bufferData(gl.ARRAY_BUFFER, new Float32Array([
-w/2, h/2,
w/2, h/2,
-w/2, -h/2,
w/2, -h/2
]), gl.STATIC_DRAW)
gl.bindBuffer(gl.ARRAY_BUFFER, position)
gl.vertexAttribPointer(attrib.vertexPosition,
2, gl.FLOAT, false, 0, 0)
gl.enableVertexAttribArray(attrib.vertex)
gl.uniformMatrix2fv(uniform.transformMatrix, false, transform)
gl.uniform2f(uniform.translation, x+w/2, y+h/2)
gl.uniform2f(uniform.screenRes, gl.canvas.width, gl.canvas.height)
Вершинный шейдер:
attribute vec2 aVertexPosition;
attribute vec2 aTextureCoord;
uniform mat2 uTransformMatrix;
uniform vec2 uTranslation;
uniform vec2 uScreenRes;
varying vec2 vTextureCoord;
void main() {
gl_Position = vec4(2.0 * (uTransformMatrix * aVertexPosition + uTranslation) / uScreenRes - 1.0, 1.0, 1.0);
vTextureCoord = aTextureCoord;
}
Не стесняйтесь поиграть с переменными в ручке, особенно с размерами холста;когда вы уменьшаете размер, то размер спрайта увеличивается, и наоборот.
PS Меня не волнует, как инвертировать текстуру.Я отложу это на потом.