• Create Account

Like
0Likes
Dislike

# WWH - Sub-texel Accuracy

By Paul Nettle | Published Aug 23 1999 03:44 PM in Graphics Programming and Theory

accuracy sub-texel wwh1 slide polygon code scan-line sub-pixel
 If you find this article contains errors or problems rendering it unreadable (missing images or files, mangled code, improper text formatting, etc) please contact the editor so corrections can be made. Thank you for helping us improve this resource

The purpose of a WWH is to expand one's knowledge on a topic they already understand, but need a reference, a refresher course, or to simply extend what they already know about the topic. WWH is the quick tutor. Just the [W]hat, [W]hy and [H]ow

What

Sub-texel accuracy is used to clean up texturing quality, and solve other accuracy problems (such as wrap-around in textures, and overflow for Gouraud shading).

This document relies on the fact that you have already read WWH1 (sub-pixel accuracy) as they are interrelated, and especially since you can't achieve sub-texel accuracy without first achieving sub-pixel accuracy.

Considering what we learned from WWH1, sub-texel accuracy is a very simple extension of sub-pixel accuracy. In the same way that we need to "slide" polygons across the screen to align with pixel boundaries, sub-texel accuracy simply "slides" the texture across the polygon to align to the polygon edges.

Why

For better looking renders, of course. (See WWH1 for more details).

How

Considering what we learned about sub-pixel accuracy from WWH1, here's what we need to do to achieve sub-texel accuracy.

In our polygon scan-conversion model explained in WWH1, we "slide" our pixels down the top of each edge. For sub-texel accuracy, we'll need to "slide" our texture at the beginning of each scan-line. Due to the frequency at which this code gets called (once per scan-line vs. once per edge) this code may cause a noticeable speed hit, however, with pipeline optimizations that speed-hit can be minimized.

Consider the following code fragment:

start_u += delta_u * SUB_PIX(start_x); start_v += delta_v * SUB_PIX(start_x);
What this does is to simply "slide" the starting U/V coordinates along its scan-line by the distance that the starting X is from the right-edge of its pixel.

This process must be done for each value that gets interpolated along the edges (i.e. any U/V for texturing or Gouraud color values, etc.)

This is sub-texel accuracy. To test your modifications, try rotating a quad polygon perpendicular to the screen very slowly, with a checkerboard pattern textured onto it.