Drawing Lines in Direct Draw??
Hi, I posted this in directX, but thought it might be too basic for them to bother answering, so I''ll try it here. I''ve been working on an rpg for a while using DirectX 6 (yeah i know) and am using bitmaps for all the graphics. I want to draw a line between the player and the enemy (like laser fire) was wondering how this could be accomplished in DirectDraw? Any other help would be appreciated. Thanks
BC
- Free Your Mind -
Try implementing Brasenham''s Line Algorithm. Look here for how it works, though you''ll have to port it to DirectX. It should give you the basic idea, though.
http://kmitnb05.kmitnb.ac.th/~tct04043/linebrasenham.htm
Or here: Taken from Lamothe''s Tricks of the Windows Game Programming Gurus
-Arek the Absolute
http://kmitnb05.kmitnb.ac.th/~tct04043/linebrasenham.htm
Or here: Taken from Lamothe''s Tricks of the Windows Game Programming Gurus
int Draw_Line(int x0, int y0, // starting position int x1, int y1, // ending position UCHAR color, // color index UCHAR *vb_start, int lpitch) // video buffer and memory pitch{// this function draws a line from xo,yo to x1,y1 using differential error// terms (based on Bresenahams work)int dx, // difference in x''s dy, // difference in y''s dx2, // dx,dy * 2 dy2, x_inc, // amount in pixel space to move during drawing y_inc, // amount in pixel space to move during drawing error, // the discriminant i.e. error i.e. decision variable index; // used for looping// pre-compute first pixel address in video buffervb_start = vb_start + x0 + y0*lpitch;// compute horizontal and vertical deltasdx = x1-x0;dy = y1-y0;// test which direction the line is going in i.e. slope angleif (dx>=0) { x_inc = 1; } // end if line is moving rightelse { x_inc = -1; dx = -dx; // need absolute value } // end else moving left// test y component of slopeif (dy>=0) { y_inc = lpitch; } // end if line is moving downelse { y_inc = -lpitch; dy = -dy; // need absolute value } // end else moving up// compute (dx,dy) * 2dx2 = dx << 1;dy2 = dy << 1;// now based on which delta is greater we can draw the lineif (dx > dy) { // initialize error term error = dy2 - dx; // draw the line for (index=0; index <= dx; index++) { // set the pixel *vb_start = color; // test if error has overflowed if (error >= 0) { error-=dx2; // move to next line vb_start+=y_inc; } // end if error overflowed // adjust the error term error+=dy2; // move to the next pixel vb_start+=x_inc; } // end for } // end if |slope| <= 1else { // initialize error term error = dx2 - dy; // draw the line for (index=0; index <= dy; index++) { // set the pixel *vb_start = color; // test if error overflowed if (error >= 0) { error-=dy2; // move to next line vb_start+=x_inc; } // end if error overflowed // adjust the error term error+=dx2; // move to the next pixel vb_start+=y_inc; } // end for } // end else |slope| > 1// return successreturn(1);} // end Draw_Line
-Arek the Absolute
-Arek the Absolute"The full quartet is pirates, ninjas, zombies, and robots. Create a game which involves all four, and you risk being blinded by the sheer level of coolness involved." - Superpig
This topic is closed to new replies.
Advertisement
Popular Topics
Advertisement
Recommended Tutorials
Advertisement