//
package render; import java.awt.*; /** Texture handling */ public final class Texture { private int[] texels; private int height, width; private String name; private ImagePyramid pyramid = null; public static boolean useMIP = true; private boolean mip; /** Constructor using an array of pixels * @param pix array of pixel colors using packed ints * @param h height of the image * @param w width of the image * @param name texture name * @param mip flag determining whether to use the multi image pyramid (MIP). */ public Texture(int[] pix, int h, int w, String name, boolean mip) { texels = pix; height = h; width = w; pyramid = new ImagePyramid(new ImageBuffer(pix, w, h)); this.mip = mip; } /** Constructor using an image object * @param src Image object * @param component the component that the image is associated with * @param name texture name * @param mip flag determining whether to use the multi image pyramid (MIP). */ public Texture(Image src, String name, Component component, boolean mip) { ImageBuffer buffer = new ImageBuffer(src, component); texels = buffer.pix; height = buffer.getHeight(); width = buffer.getWidth(); pyramid = new ImagePyramid(buffer); this.mip = mip; } /** Returns the integer value from the texture at [u, v ]. * @param u horizontal component * @param v vertical component * @param dx size of the pixel ( for use with mip ) * @param dx size of the pixel ( for use with mip ) * @param mult the scale factor for dx and dy ( for use with mip ) */ public final int getTexel(double u, double v, int dx, int dy, int mult) { if (u >= 0 && u < 1 && v >= 0 && v < 1) { if (mip && useMIP) { double size = (1. * dx) * (1. * dy) / (mult * mult); return pyramid.get(u, v, size); } return texels[(int) (v * height) * width + (int) (u * width)]; } return texels[0]; } }