Vấn đề với ngây thơ render texture scanline nhỏ lên một quad toàn màn hình lớn là kết cấu sẽ mở rộng quy mô, làm gì là một tập hợp các scanlines single-pixel trong kết cấu dày hơn nhiều, blurrier (tùy thuộc vào phương pháp nội suy của bạn), và nói chung là xấu hơn.
Bạn nên thay gạchkết cấu trên hình tứ giác theo cách để duy trì tỷ lệ pixel-to-texel 1: 1. Điều này liên quan đến việc điều chỉnh tọa độ kết cấu của hình tứ giác sao cho chúng lớn hơn 1 ở mức xa nhất và cũng đặt tham số bọc kết cấu của bạn để lặp lại thay vì kẹp. Nếu kết cấu của bạn là 64x64 pixel và màn hình của bạn là 1024x768 pixel, bạn có thể hình rằng trong trục X, bạn phải xếp kết cấu 16 lần (1024/64). Tương tự, trên trục Y, bạn phải xếp nó 12 lần (768/64). Bạn có thể điều chỉnh toán học này cho giới hạn thực tế của kết cấu và màn hình của bạn. Sử dụng các số đó (16 và 12) làm phạm vi tối đa của tọa độ kết cấu của hình tứ giác của bạn và bạn sẽ nhận được kết quả tốt hơn nhiều. Tùy thuộc vào cách trình chiếu chính tả của bạn hiện được thiết lập cho các ô, bạn thậm chí có thể không cần thay đổi nó để hiển thị hình này.
Ngoài ra, bạn có thể thực hiện một cách tiếp cận đổ bóng: kết xuất cảnh thông thường của bạn thành một kết cấu, sau đó kết xuất kết cấu đó dưới dạng một hình tứ giác toàn màn hình, nhưng bỏ qua từng dòng pixel lẻ. Nếu bạn biết giới hạn của màn hình trong trình đổ bóng, bạn có thể thực hiện việc này khá dễ dàng (đây là mã giả , mơ hồ là HLSL-ish, nhưng nên dịch dễ dàng):
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);
}