O problema de renderizar ingenuamente uma textura pequena da linha de varredura em um quad grande de tela cheia é que a textura aumentará de tamanho, tornando o que era um conjunto de linhas de varredura de pixel único na textura muito mais espesso, mais desfocado (dependendo do seu método de interpolação) e geralmente mais feio.
Você deveria colocar lado a ladoa textura no quad, de maneira a preservar uma proporção de 1: 1 pixel / texel. Isso envolve o ajuste das coordenadas de textura do quadrilátero para que sejam maiores que 1 na maior extensão e também a definição do parâmetro de quebra de texturas para repetir em vez de prender. Se sua textura é de 64x64 pixels e sua tela é de 1024x768 pixels, você pode imaginar que no eixo X você deve agrupar a textura 16 vezes (1024/64). Da mesma forma, no eixo Y, você deve colocá-lo lado a lado 12 vezes (768/64). Você pode ajustar essa matemática para os limites reais de sua textura e tela. Use esses números (16 e 12) como as extensões máximas das coordenadas de textura do seu quad, e você obterá um resultado muito melhor. Dependendo de como sua projeção ortográfica está atualmente configurada para os ladrilhos, talvez você nem precise alterá-la para renderizá-la.
Como alternativa, você pode adotar uma abordagem de sombreador: renderize sua cena normal em uma textura e, em seguida, renderize essa textura como um quad em tela cheia, mas omita todas as linhas ímpares de pixels. Se você conhece os limites da tela no sombreador, pode fazer isso com muita facilidade (esse é um pseudocódigo , vagamente HLSL-ish, mas deve ser traduzido facilmente):
float2 screenSize;
sampler2D textureSampler;
float2 textureCoordinate;
float4 main () {
// Interpolation of texture coordinates means that we don't get nice
// integer boundaries we could take the modulus of.
float half_y = textureCoordinate.y * screenSize.y * 0.5;
float delta = round(half_y) - half_y;
float delta_squared = delta * delta;
if (delta_squared < 0.1) {
return texture2D(textureSampler, textureCoordinate);
}
return float4(0,0,0,0);
}