计算机知识一锅烩

图形学复习知识点1(学校课程 很水)

2017-12-26  本文已影响28人  球球球球笨

图形学的基本目标和任务

目标
视觉交流,通过图形或者几何的方式来表示或展示一些问题或信息。
基本任务
表示:将客观世界用二维或三维的方式表示
绘制:如何将计算机中的对象用一种直观形象的图形图像方式表现出来
交互:通过计算机输入输出设备,以有效的方式表示与绘制的技术


计算机图形学相关学科

图像处理:将客观世界中原来存在的物体形象处理成新的数字化图像的相关技术。
模式识别:用摄像机和计算机代替人眼对目标进行识别跟踪和测量,用计算的方法模拟人类的视觉系统。
计算几何:研究几何模型和数据处理的学科,讨论几何形体的计算机表示,分析和综合。。


计算机图形学的应用领域

计算机辅助设计与制造
科学计算可视化
虚拟现实
计算机动画
计算机游戏
CG插画


图形系统体系结构(图形流水线)

应用程序阶段(产生图元):把数据以图元的形式提供给图形硬件,也提供用于表面纹理映射的图像或者位图。

几何处理阶段(产生二维屏幕坐标):以每个顶点为基础对几何图元进行处理,并从三维坐标变换为二维屏幕坐标。


几何处理阶段.PNG

像素处理阶段:屏幕对象被传送到像素处理器进行光栅化,再对每个像素进行着色,然后再输出到帧缓冲器,最后再输出到显示器。


直线生成算法(待补)


区域填充

  1. 边界定义的区域,区域边界上的像素颜色已确定,区域内部像素没有设置制定的颜色。边界上和区域内的目标颜色值可相同也可不同。
  2. 内定义区域。只划分区域内外部分,区域外所有像素已有特定颜色,区域内颜色与区域外不同。

漫水法:四连通&&八连通


void FloodFill4 (int x, int y, int newcolor, int boundaryColor) {
 // 当处理内定义区域时,用if (getpixel(x, y)!=newcolor)判断即可
    if (getpixel(x, y)!=newcolor && getpixel(x,y)!=boundaryColor)  {
    setpixel(x, y, newcolor, boundaryColor);
    FloodFill4(x-1, y, newcolor, boundaryColor);
    FloodFill4(x, y+1, newcolor, boundaryColor); 
    FloodFill4(x+1, y, newcolor, boundaryColor); 
    FloodFill4(x, y-1, newcolor, boundaryColor);  
        //如果是基于八连通,则要增加其它四个方向的类似代码
   }
}

void FloodFill (int x, int y, int newcolor, int boundaryColor)
{
     Stack stack;
     stack.Push(Pixel(x, y));  //把种子像素(x,y)推入栈中
     while (! stack.Empty())    //当栈不空时循环执行以下代码
     {
         pixel=stack.Pop();  //从栈顶弹出一个像素
    // 当处理内定义区域时,用if (pixel.Color !=newcolor)判断即可
         if (pixel.Color != newcolor && pixel.Color != boundaryColor) {
             xx = pixel.x; yy = pixel.y;
             setpixel( xx,  yy,  newcolor, boundaryColor);
             stack.Push ( Pixel (xx-1, yy ));
             stack.Push ( Pixel( xx, yy+1)); 
             stack.Push ( Pixel (xx+1, yy )); 
             stack.Push ( Pixel(xx, yy-1));
         }
     }
}

种子扫描线填充算法
从给定的种子点开始,填充当前扫描线上种子点所在的区间,然后确定与这一区间相邻上下两条扫描线上需要填充的区间。在这个区间上取最左侧或最右侧的一个点作为新的种子点,不断重复以上过程,直到所有区间都被处理完。

算法步骤:

  1. 从包含种子像素的堆栈中推出区段内的种子像素;
  2. 沿着扫描线,对种子像素的左右像素进行填充,直至遇到边界像素为止;
  3. 区段内最左和最右像素记为xl和xr,在此区间内,检查与当前扫描线相邻的上下两条扫描线是否全为边界像素或已被填充过;
  4. 如果经测试,这些扫描线上的像素段需要填充,则在xl和xr区间范围内,把每一像素段的最右像素作为种子像素,并压入堆栈;
  5. 初始化时,向堆栈压入种子像素,并在堆栈为空时结束。

反走样技术

对图形进行光栅化时,离散的像素表示连续直线和区域边界时引起的失真现象称为走样。用于减小和消除走样的技术称为反走样。

  1. 超采样方法:通过软件方式来提高分辨率。将图形以高于物理光栅设备分辨率完成光栅化(伪光栅化),按每个子像素合并得到要显示的像素灰度值。
  2. 线段反走样技术:假定线段有宽度,把线段看成狭长矩形,线段通过每个像素时,求出两者相交的面积,根据该面积值来确定像素的灰度值和颜色值。颜色值与面积呈线性关系。
  3. 多边形反走样算法:采用线段反走样来改善多边形边界的显示质量。求像素与边界的相交面积。
上一篇下一篇

猜你喜欢

热点阅读