/* * Render.java * * Alex S. */ public class Render { public int width,height; public int[] pix; public float[] pixz; public int[][] faces; public float[][] vertices; public Render(int w,int h,int[] pix){ width = w; height = h; this.pix = pix; pixz = new float[pix.length]; } /** * clear both screen and depth buffer */ public void clear(){ for(int i=0;i= height) cy = height-1; while(ay <= cy){ w = width * ay; xdiff = bx - ax; if(xdiff > 0){ x = ax; z = az; r = ar; g = ag; bcolor = ab; tz = (bz - az) / xdiff; tr = (br - ar) / xdiff; tg = (bg - ag) / xdiff; tb = (bb - ab) / xdiff; while(x < bx){ if(pixz[(int)(w + x)] > z){ pix[(int)(w + x)] = PixApplet.pack( (int)(0xFF*r), (int)(0xFF*g), (int)(0xFF*bcolor) ); pixz[(int)(w + x)] = z; } x += 1; z += tz; r += tr; g += tg; bcolor += tb; } }else{ if(pixz[(int)(w + ax)] > az){ pix[(int)(w + ax)] = PixApplet.pack( (int)(0xFF*ar), (int)(0xFF*ag), (int)(0xFF*ab) ); pixz[(int)(w + ax)] = az; } } ay += 1; //by += 1; ax += axt; az += azt; ar += art; ag += agt; ab += abt; bx += bxt; bz += bzt; br += brt; bg += bgt; bb += bbt; } } /** * draw a line of a particular color */ public void line(int x1,int y1,int x2,int y2,int color) { int xunit=1,yunit=1,xdiff,ydiff,length,error=0; int X1=x1,Y1=y1; if ((xdiff=x2-x1) < 0) { xdiff=-xdiff; xunit=-1; } if ((ydiff=y2-y1) < 0) { ydiff=-ydiff; yunit=-1; } if (ydiff > xdiff) { for (length=ydiff;length > 0;length--) { //if ((X1 > 0) && (X1 < width) && (Y1 > 0) && (Y1 < height)) pix[Y1*width+X1] = color; Y1+=yunit; error+=xdiff; if (error > ydiff) { X1+=xunit; error-=ydiff; } } } else { for (length=xdiff;length > 0;length--) { //if ((X1 > 0) && (X1 < width) && (Y1 > 0) && (Y1 < height)) pix[Y1*width+X1] = color; X1+=xunit; error+=ydiff; if (error > xdiff) { Y1+=yunit; error-=xdiff; } } } } }