После того, как я решил попробовать программировать в современном OpenGL, я оставил конвейер с фиксированными функциями, и я не совсем уверен, что получу ту же функциональность, что и раньше.
Я пытаюсь текстурировать картуквадраты с идеальным размером пикселя, соответствующие размеру текстуры.Например, текстура 128x128 отображается на четырехугольник размером 128x128.
Это мой вершинный шейдер.
#version 110
uniform float xpos;
uniform float ypos;
uniform float tw; // texture width in pixels
uniform float th; // texture height in pixels
attribute vec4 position;
varying vec2 texcoord;
void main()
{
mat4 projectionMatrix = mat4( 2.0/600.0, 0.0, 0.0, -1.0,
0.0, 2.0/800.0, 0.0, -1.0,
0.0, 0.0, -1.0, 0.0,
0.0, 0.0, 0.0, 1.0);
gl_Position = position * projectionMatrix;
texcoord = (gl_Position.xy);
}
Это мой фрагментный шейдер:
#version 110
uniform float fade_factor;
uniform sampler2D textures[1];
varying vec2 texcoord;
void main()
{
gl_FragColor = texture2D(textures[0], texcoord);
}
Мои данные вершин таковы, где w и h - ширина и высота текстуры.
[
0, 0,
w, 0,
w, h,
0, h
]
Я загружаю текстуру 128x128, и с этими шейдерами я вижу изображение, повторенное 4 раза: http://i.stack.imgur.com/UY7Ts.jpg
Может ли кто-нибудь дать совет о том, как правильно переводить и масштабировать, учитывая форму thth, xpos, xpos?