Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- void Client::draw_DDA(int x1, int y1, int x2, int y2, unsigned int color1, unsigned int color2, double z1, double z2) {
- float dx = x2-x1;
- float dy = y2-y1;
- float dz = z2-z1;
- float loops = 0;
- float xChange, yChange, zChange = 0;
- unsigned int interpColor;
- int r1 = (color1 >> 16) & 0xFF;
- int g1 = (color1 >> 8) & 0xFF;
- int b1 = (color1) & 0xFF;
- int r2 = (color2 >> 16) & 0xFF;
- int g2 = (color2 >> 8) & 0xFF;
- int b2 = (color2) & 0xFF;
- int roundR, roundG, roundB;
- float r = r1;
- float g = g1;
- float b = b1;
- float dr = r2-r1;
- float dg = g2-g1;
- float db = b2-b1;
- if (abs(dx) > abs(dy)){
- loops = abs(dx);
- dr = dr/abs(dx);
- dg = dg/abs(dx);
- db = db/abs(dx);
- //dz = dz/abs(dx);
- }else{
- loops = abs(dy);
- dr = dr/abs(dy);
- dg = dg/abs(dy);
- db = db/abs(dy);
- //dz = dz/abs(dy);
- }
- xChange = dx / loops;
- yChange = dy / loops;
- zChange = dz / loops;
- float x = (float)x1;
- float y = (float)y1;
- float z = (float)z1;
- for(int i = 0; i<loops; i++){
- r += dr;
- g += dg;
- b += db;
- //z += dz;
- roundR = round(r);
- roundG = round(g);
- roundB = round(b);
- interpColor = (0xFF << 24) + ((roundR & 0xFF) << 16) + ((roundG & 0xFF) << 8) + (roundB & 0xFF);
- if (z < zbuffer[int(floor(x + 0.5))][int(floor(y+ 0.5))]){
- drawable->setPixel(x, y, interpColor);
- zbuffer[int(floor(x+0.5))][int(floor(y+0.5))] = z;
- }
- y += yChange;
- x += xChange;
- z += zChange;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement