C++ and DirectX 9

So, Sadly I wrote out a whole post only to have wordpress lose it somehow, So now I am unwillingly typing this post out again. Definitely with less excitement. Though I will try my best to keep it interesting. So I have been working lately with C++ and Less C#. Mainly I have been wanting to learn how to draw with Directx. So as I thought the best way to start making something appear on screen would be through drawing one single pixel to screen. I made it so I could choose colors and make it available to me if I wanted to change these colors, that I could.

Anyways I succeeded, with some reading, in actually drawing a white pixel to the screen, Now I started thinking if I wanted to draw a line to the screen how would I go about this. Have you guessed it. YES! That is correct. I will need to string multiple pixels together to created a line. Now I could have just repeated the code I wrote and changed the pixel coordinates by one every time one is drawn. That would work, but would take a long time. Think about it this way. If you wanted to make a line that was 100 pixels long you would have to copy the code 100 times, change each value 100 times then hope that there isn’t any typos in that code that could introduce bugs. What I am getting at is there is an easier way!

LOOPS!

The for loop is excellent for this. Basically for those that don’t know, A for loop will take value and increment it for however long I want it to go for. (very true to the name, “for loop”). ANYWAYS I stuck the code to draw a pixel into the loop and told it to go for about 200 pixels… this is what I got.

A line drawn.

Yup. pretty boring. But my theory worked. and I am positive this is how it is normally done… At least I think it is. Anyways next I thought it would be cool to resize and manipulate this line just to see how it would react. I know most have heard of the equation Y = mx+b. me too. I didn’t think I needed to know or remember it ever again. Well surprise I do. If I want to Draw “graph” a line that has some sort of slope, I need to use this equation. After some trial and error, I got it to work. I will post the code below for those that are interested. Can you find the equation in the code?! A fun challenge.

Here is another picture of the Line at an angle. One disclaimer, you might be wondering why I am even doing this. Fundamentals my boy! This code can apply to some rather cool things down the road that I will probably hit on later on.

Angled Line

Also Here is a video of the Line movement.

Enjoy.

CODE:

void D3DGraphics::DrawLine( int x1, int y1, int x2, int y2, int r, int g, int bl )
{
int dy = y2 -y1;
int dx = x2 – x1;

if (abs( dy ) > abs ( dx ) )
{
if (y1 > y2)
{
int temp = y2;
y2 = y1;
y1 = temp;
temp = x2;
x2 = x1;
x1 = temp;
}
float m = (float)dx / (float)dy;
float b = x1 – m*y1;
for ( int y = y1; y <= y2; y++)
{
int x = m*y + b + 0.5f;
PutPixel(x,y,r,g,bl);
}
}
else
{
if ( x1 > x2 )
{
int temp = y2;
y2 = y1;
y1 = temp;
temp = x2;
x2 = x1;
x1 = temp;
}
float m = (float)dy / (float)dx;
float b = y1 – m*x1;
for ( int x = x1; x <= x2; x++ )
{
int y = m*x + b + 0.5f;
PutPixel( x,y,r,g,bl );
}
}

}

One response

  1. TheFaz

    i did love doing c++, it’s fun how logical it is, and how you can just figure stuff out with trial and error…sometimes. i was thinking about how you stand out, and i think there are very few programmers with chem degrees. could you apply programming to chem somehow? and maybe to the oil biz, (program for designing…pipes, i dunno).

    June 24, 2012 at 11:00 am

Leave a comment