наложение текстуры с идеальным пикселем в современном OpenGL

Решив попробовать программировать в современном 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

Может ли кто-нибудь дать совет о том, как правильно переводить и масштабировать с учетом формы tw th, xpos, xpos?

6
задан Lefty 23 April 2011 в 13:42
поделиться