游戏开发论坛

 找回密码
 立即注册
搜索
查看: 5237|回复: 2

请问哪位知道VC下用DirectX画直线是怎么做的?

[复制链接]

1

主题

1

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2005-8-28 18:48:00 | 显示全部楼层 |阅读模式
就是最基础的画直线,加上颜色。

8

主题

20

帖子

26

积分

注册会员

Rank: 2

积分
26
发表于 2005-9-6 18:03:00 | 显示全部楼层

Re:请问哪位知道VC下用DirectX画直线是怎么做的?

都自己??2D?D形??lt;windows??蚓?程大??技巧理有?>
bresenham算法!!!,很快!!

4

主题

7

帖子

7

积分

新手上路

Rank: 1

积分
7
发表于 2005-10-6 05:55:00 | 显示全部楼层

Re:请问哪位知道VC下用DirectX画直线是怎么做的?

//**************************************************
//作者:杨文鸽   QQ:95852992          TZ_WENGE@163.COM
// int game::BLines() //求出2点间的路径放入path
//        删除选 中的gno号对象。
//**************************************************
int game::Blines (int x0, int y0, int x1, int y1,int q,int zy1,int sd)
{
  //wi=0;
  int fx=0;
  //fx=fw(x0,y0,x2,y2,zx,zy);        //直接取方向,在内部放入全局变量FX中,并初始开始路径点WI!!!
  int x, y, dx, dy,i,w,zx,zy;
  int e;
  //x1=x2-zx1;y1=y2-zy1;
  x = abs(x1-x0);
  y = abs(y1-y0);

  dx = (x1-x0);
  dy = (y1-y0);
  if (x==0)  //在Y轴上
  {   for(i=1;i<=sd;i++)
          //i=1;
          {
                  path.x=x0;
                  path.y=y0+y/dy*i;
          }
      if(abs(x0-path[sd].x)>=x&&abs(y0-path[sd].y)>=y) {path[sd].x=x1;path[sd].y=y1;}
          
      return  i;
  }
  if (y==0)  //在X轴
  {   for(i=1;i<=sd;i++)
         
          {
                  path.y=y0;
                  path.x=x0+x/dx*i;          
          }
      if(abs(x0-path[sd].x)>=x&&abs(y0-path[sd].y)>=y) {path[sd].x=x1;path[sd].y=y1;}
       
      return  i;
  }
  //求在正直角的斜边
  if (x==y)
  {
      for(i=1;i<=sd;i++)
          //i=1;
          {
                 path.x=x0+x/dx*i;
                 path.y=y0+y/dy*i;;
          }

      return  i;
  }
  zx = abs(dx);
  zy = abs(dy);
  if (zx<zy)//如果X小于y即在别区内,就进行交换使Y<X
  {
          w=zx;zx=zy;zy=w;
  }
   
    e = -1*zx;
//进行计算《1的直线
        i=zx;
        y=0;
        //预先判断好是属于什么区(8区中)
        if (dy>0&&dx>0)//1
  {
          if (abs(dy)<abs(dx))
          {   w=1;
          }
          else
          {   w=2;
          };
  }
if (dx<0&&dy>0)//2
{
     if (abs(dy)<abs(dx))
          {   w=3;
          }
          else
          {   w=4;
          };
}
if (dx<0&&dy<0)//3
{
     if (abs(dy)<abs(dx))
          {   
                  w=5;
          }
          else
          {   w=6;
          };
}
if (dx>0&&dy<0)  //4
{
     if (abs(dy)<abs(dx))
          { w=7;
          }
          else
          {  w=8;
          };
}
//从这儿开始取是否加1的处理的判断   
    for (x=1;x<=sd;x++)
  {
   //x++;
            e +=2*zy;
           if (e>=0)
                   {  
              y++;
              e-=2*zx;
                   }
                             if (w==1)
          {   path[x].x=x0+x;
                  path[x].y=y0+y;
          }
         if (w==2)
          {   path[x].x=x0+y;
                  path[x].y=y0+x;
          };


     if (w==3)
          {   path[x].x=x0-x;
                  path[x].y=y0+y;
          }
          if (w==4)
          {   path[x].x=x0-y;
                  path[x].y=y0+x;
          };


     if (w==5)
          {   path[x].x=x0-x;
                  path[x].y=y0-y;
          }
         if (w==6)
          {   path[x].x=x0-y;
                  path[x].y=y0-x;
          };

     if (w==7)
          {   path[x].x=x0+x;
                  path[x].y=y0-y;
          }
         if (w==8)
          {   path[x].x=x0+y;
                  path[x].y=y0-x;
          };
        }
  return  i;
  }
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-12-28 01:34

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表