Windows Game Note8

1、画直线的Bresenham算法, 开始于(x0, y0)点,但是它不采用斜率来计算移动。它先在x方向上移动一个像素,然后再决定如何移动y方向的像素,以使所描画的直线尽量接近于实际的线。这是用过使用一个衡量光栅化得出的直线与实际直线之间的接近程度的误差项来实现的。该算法对误差项不断调整,以使得数字化的光栅线能够尽量接近真实直线。
  x = x0;
  y = y0;

  dx = x1 - x0;
  dy = y1 - y0;
  error = 0;
  for(int index = 0; index < dx; index++)
  {
    Plot_Pixel(x, y, color);
    error + dy;
    if(error > dx)
    {
        error -= dx;
        y--;
    }
  }
2、裁剪直线的Cohen-Sutherland算法: 基本上,它是一种蛮力型算法。但是,该算法并没有用很多很多寻找直线的位置,而是把裁剪区分成许多部分,然后给每一段被裁剪的线段的两端分配一位代码,而后,只采用少量的if语句或一个case语句,就能判断出具体情况。 Windows <wbr>Game <wbr>Note8
3、一种检测多边形凹凸性的方法是:在多边形上任取两个顶点连成一线,如果有一条这样的直线完全落在多边形外部,则该多边形为凹多边形。
4、
// a 2D vertex
typedef struct VERTEX2DI_TYP
{
      int x,y; // the vertex
} VERTEX2DI, *VERTEX2DI_PTR;
// a 2D polygon
typedef struct POLYGON2D_TYP
{
      int state;              // state of polygon
      int num_verts;      // number of vertices
      int x0,y0;              // position of center of polygon 
      int xv,yv;              // initial velocity
      DWORD color;          // could be index or PALETTENTRY
      VERTEX2DI *vlist; // pointer to vertex list
} POLYGON2D, *POLYGON2D_PTR;
5、填充实心多边形
Windows <wbr>Game <wbr>Note8
首先,你创建的三角形只有四种可能的类型,分别是:
① 平顶:这是具有平顶的三角形
② 平底:这是具有平底的三角形
③ 右边为主:三角形的三个顶点的y坐标各不相同,但是最长的斜边在右侧
④ 左边为主:三角形的三个顶点的y坐标各不相同,但是最长的斜边在左侧
6、画三角形和画线十分相似,因为你必须先描绘出三角形边上的点,然后用直线一条一条地把三角形勾勒出来。一旦每条边的斜率计算出来以后,你就只要把扫描线向下移,根据斜率调整端点坐标x的变化量xs, xe,然后再画一条线连接两端。 不必使用Bresenham算法,因为现在不是要画直线。你所要考虑的是直线在哪个按整数间隔对齐的像素上相交。
Windows <wbr>Game <wbr>Note8
下面是填充平底三角形的算法:
① 首先计算出左边和右边的比率dx/dy,基本上也就是1/斜率。你要知道每单位y引起x的变化量。简单说就是dx/dy或1/M。对应左边和右边的值分别成为dxy_left和dxy_right
② 从顶点(x0, y0)开始,使xs = xe = x0,且y = y0
③ 将xs加上dxy_left,xe加上dxy_right,这样就能找出要进行填充所需要的端点了
④ 从(xs, y)向(xe, y)画线
⑤ 回到第3步,继续执行直到该三角形从顶端到底部都被光栅化完毕
7、右边为主的三角形
Windows <wbr>Game <wbr>Note8
算法的开始步骤和画平底三角形是一样的,也就是说,从同一个起始点进行边的内插,问题会在左边内插到第二个顶点时出现,你需要重新计算左边的内插值,然后才能继续光栅化。
8、四边形光栅化的一般情形
    假如把一个四边形分成两个三角形,就可以简化问题。假设四边形的顶点0、1、2、3以一定的顺序排列,如顺时针...
    三角形1由顶点0、1、3组成
    三角形2由顶点1、2、3组成
9、多边形的光栅化一般算法
① 如果尚需处理的顶点数目大于3,继续执行第2步,否则停止
② 取出前3个顶点组成一个三角形
③ 分离新建的三角形,递归地对剩下的n - 1个顶点重复第2步
Windows <wbr>Game <wbr>Note8
    当你在光栅化一个n边形时,最好的方法通常使先在对象空间里进行裁剪,然后使用不含内部扫描线裁剪的光栅代码进行多边形的光栅化。





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值