Texture Coordinates
- Specify a texture coordinate at each vertex (s, t) or (u, v)
- Canonical coordinates where u and v are between 0 and 1
- Simple modifications to triangle rasterizer
public void Draw(Raster raster) {
.
.
.
PlaneEqn(uPlane, u0, u1, u2);
PlaneEqn(vPlane, v0, v1, v2);
.
.
.
for (y = yMin; y <= yMax; y += raster.width) {
e0 = t0; e1 = t1; e2 = t2;
u = tu; v = tv; z = tz;
boolean beenInside = false;
for (x = xMin; x <= xMax; x++) {
if ((e0 >= 0) && (e1 >= 0) && (e2 >= 0)) {
int iz = (int) z;
if (iz <= raster.zbuff[y+x]) {
int uval = u * texture.width;
uval = tile(uval, texture.width);
int vval = v * texture.height;
vval = tile(vval, texture.height);
int pix = texture.getPixel(uval, vval);
if ((pix & 0xff000000) != 0) {
raster.pixel[y+x] = pix;
raster.zbuff[y+x] = iz;
}
}
beenInside = true;
} else if (beenInside) break;
e0 += A0; e1 += A1; e2 += A2;
z += Az; u += Au; v += Av;
}
t0 += B0; t1 += B1; t2 += B2;
tz += Bz; tu += Bu; tv += Bv;
}
}
|