From: Sergio Masci (sergio@titan.demon.co.uk)
Date: Tue 11 Jul 2000 - 21:20:12 IDT
> This is another generic graphics programming question, but hopefully > someone will know the answer. > > How do I iteratate through the colors? It seems like it should be simple, > but it's not behaving as expected. I'm writing a little something that > draws a color wheel on the screen at 800x600x64K. Just for kicks, suppose > that it's just drawing vertical lines, so the code looks like this: > > ... > color = 0; > for (xnow = 0; xnow < xmax; xnow++) > gl_line(xnow,0,xnow,ymax,color++); > ... > > I come up with about 13 identical sections of color fading. > the same happens if I do > > vga_setcolor(color++); > vga_drawline(xnow,0,xnow,ymax); > > > Is there a way that I can do what I am trying simply? > > Regards, > > -patrick I don't use the gl libraries or the vga_setcolor or vga_drawline functions so I cannot give a concrete answer BUT it looks to me as though the colour is a direct copy of the hardware pixel used in the 800x600x64K mode. In this mode the colours are packed into a 16 bit word something like 6:5:5 or 6:6:4 I cannot remember exactly. Try experimenting with the following: float fx, fy, fz; int x, y red, green, blue, pixel; for (x=0; x<800; x++) { for (y=0; y<600; y++) { fx = (float)x / 799; fy = (float)y / 599; fz = sqrt(x * x + y * y) / sqrt(799*799 + 599*599); red = 0x2f * fx; blue = 0x1f * fy; green = 0x1f * fz; pixel = (red << 10) | (green << 5) | blue; vga_setcolor(pixel); vga_drawline(x,y,x,y); } } You should end up with a box, one corner of which should be black, diagnally opposit will be white, one other corner should be blue and the last should be red (no pure green since this component is generated from blue and red and so does not exist in this square without them). Regards Sergio
This archive was generated by hypermail 2.1.4 : Wed 21 Jan 2004 - 22:10:23 IST