计算机图形学应知应会

  1. 采样模式:直接把测量数据返回给程序,不需要触发器;【缺点:程序每次都需要不停地去问】

  1. 请求模式:仅当用户触发设备时才向程序返回测量信息——键盘命令行输入;【只有设备在被使用的时候它才会返回信息,对资源的消耗比上面的“采样模式”好了很多。当只有一个设备的时候会有较高的效率,但是当有多个设备输入的时候它无法并发处理】->采用优先级的方式时,会有当事设备之外的那些设备输入的信息已经被彻底丢失。

  1. 事件模式:系统可能有多个输入设备,每个设备可以在任意时间被用户触发,每个设备触发时会产生一个时间,设备的测量数据放入一个队列中,这个队列就是事件队列,由应用程序去决定如何处理。{拓展:事件模式也无法并发处理,而是采用队列的形式去响应,只不过这样的队列响应方式是十分迅速的。}
    {拓展:实际上,计算机里面没有绝对的并发,只不过操作系统在处理多件事情的时候通过交替的形式伪造了并发的效果,这种交替的时间间隔是时分渺小的,以至于令人无法察觉到两个事件之间实际上是有交替性的。}

  1. 回调函数:用户对每一种图形系统识别的时间定义一个对应的回调函数。当事件发生时,根据事件类型执行相应的回调函数。
    {拓展:模仿人类的视觉系统->利用三原色是因为人的眼睛有三种视锥细胞,只有三种颜色感应传给大脑,视锥细胞支队颜色敏感;视杆细胞则对于亮度敏感(实际上眼睛对于亮度是更加敏感的,所以有人类似于RGB地去提出YUV),它是只识别单色的。}

  2. Process the Vertex: 顶点处理,主要有坐标系变换(等价于矩阵变换)——依次进行转换,对象坐标、观察者坐标、屏幕坐标;顶点模块还计算计算顶点颜色。


  1. 为什么 要做图形变换?
    答:在图形绘制时会遇到不同的表达空间,统一不同的图形空间,正式利用图形变换的方式来进行统一。不同坐标系下一致地表达图形。

  1. 为什么要引入齐次坐标?
    答:点跟向量容易混淆;齐次坐标可以将在整个变换类型转换成齐次坐标表示地形式,获得形式上的统一。【为了统一表示图形变换,引入齐次坐标和变换矩阵的概念,图形变换通过矩阵的乘法来实现。】

  1. 刚体变换:不改变形和提及只改变位置和方向。

  1. 平移指的是将物体沿直线路径从一个坐标位置移动到另一个坐标位置的重定位。

  1. 绕着任意基准点的旋转变换步骤:(1)先将坐标原点平移到目标物体的位置并将两个坐标轴重合;(2)根据要求对目标物体进行变换,比如旋转、缩放等;(3)将坐标原点平移回坐标位置,逆平移过程。

  1. 仿射变换(Affine Transform)是什么?具有什么特性?
    答:每一个变换后的坐标都是原坐标的线性函数,这就是仿射变换。特性:平行线变换到平行线且有限点变化到有限点。平移旋转缩放反射和错且都是仿射变换的特例。

  1. 光栅化是将裁剪后的图元转化为甄嬛岑中的像素的过程。光栅化为每个图元输出一组片元(Fragment),片元是潜在的像素,里面记录有帧缓存中的位置、颜色和深度属性。深度信息对于三维计算机图形学非常有用——Z Buffer,表示距离的远近。

  1. 片元处理决定帧缓存中对应像素的颜色。

  1. 在顶点处理的时候就可以对颜色进行处理。

  1. 综上可以看出,颜色表示有两种方式——顶点处设置和片元处设置。
    在顶点处设置的时候只需要设置好顶点处的颜色属性即可,而使用片元的话则需要每一个像素都要涉及到颜色属性的设置。由此可以看出在片元中的颜色表示(Fragment shader)会更加的精细,但是也会更为消耗内存。顶点着色(Vertex shader)设置的时候则会近似的将顶点内部的区域着色为同一种或近似的颜色中,颜色精度就会弱一些。

  1. 颜色由纹理映射或者顶点颜色插值获得。插值就是在两个已知的点中间近似获取一个点的过程——利用已有的数据去推测未知的数据。

  1. 片元处理中还需要对隐藏面进行消除——利用消隐算法。

  1. 消隐: 真实感图形绘制过程中,由于投影变换失去了深度信息,往往导致图形的二义性。要消除这类二义性,就必须在绘制时消除被遮挡的不可见的线或面,习惯上称之为消除隐藏线和隐藏面,或简称为消隐,经过消隐得到的投影图称为物体的真实图形。

  1. 为什么需要纹理映射?
    答:纹理映射是真实感图形研究中必不可少的技术;图形绘制的方式绘制图形会有很高的精度,但是他的代价很高,因为它需要逐个像素逐个像素进行处理,然而使用纹理映射的方式绘制图形时,精度能够达到前者80%的精度,但其代价上却可能只是前者的10%左右。由此可以发现纹理映射的最终目的是——用尽可能小的代价去绘制图形。
    (1)比如绘制一面砖墙,就可以使用一幅具有真实感的图像或者照片作为纹理贴到一个矩形上,这样,一面逼真的砖墙就画好了。如果不用纹理映射的方法,这墙上的每一块砖都要作为一个独立的多边形来绘制。另外,纹理映射能够保证在变换多边形时,多边形上的纹理也会随之变化。例如,用透视投影模式观察墙面时,离视点远的墙壁的砖块的尺寸就会缩小,而离视点近的就会大些,这些是符合视觉规律的。
    (2)纹理映射是真实感图像制作的一个重要部分,运用它可以方便的制作出极具真实感的图形而不必花过多时间来考虑物体的表面细节。
    (3)缺点:然而纹理加载的过程可能会影响程序运行速度,当纹理图像非常大时,这种情况尤为明显。如何妥善的管理纹理,减少不必要的开销,是系统优化时必须考虑的一个问题。还好,OpenGL提供了纹理对象对象管理技术来解决上述问题。与显示列表一样,纹理对象通过一个单独的数字来标识。这允许OpenGL硬件能够在内存中保存多个纹理,而不是每次使用的时候再加载它们,从而减少了运算量,提高了速度。
    (4)OpenGL对纹理对象的管理和应用具体步骤如下:
    第一步:定义纹理对象
    const int TexNumber4;
    GLuint mes_Texture[TexNumber]; //定义纹理对象数组
    第二步:生成纹理对象数组
    glGenTextures(TexNumber,m_Texture);
    第三步:通过使用glBindTexture选择纹理对象,来完成该纹理对象的定义。
    glBindTexture(GL_TEXTURE 2D,m_Texture[0]);
    glTexImage2D(GL_TEXTURE_2D,0,3,mes_Texmapl.GetWidth(),mee_Texmapl.GetHeight()
    ,0,GL_BGR_EXT,GL_UNSIGNED_BYTE,mse_Texmapl.GetDibBitsl'trQ);
    第四步:在绘制景物之前通过glBindTexture,为该景物加载相应的纹理。
    glBindTexture(GLes_TEXTURE_2D,mse_Texture[0]);
    第五步:在程序结束之前调用glDeleteTextures删除纹理对象。
    glDeleteTextures(TexNumber, mee_Texture);
    这样就完成了全部纹理对象的管理和使用。

  1. 光照类型:单点光源与多点光源。

  1. 多边形(表示便捷可以用封闭折线并且内部有明确定义的对象)呈现中,三条性质确保多边形可以被正确地显示出来:
    (1)简单——边不交叉;(2)凸——多边形内任意两点连线仍然在多边形内;(3)平面——所有顶点在同一平面内。

  1. 为什么使用三角形绘制图形?
    答:一些典型绘制算法只对平面凸多边形才能正确绘制;校验简单性和凸性代价太高;三角形总能够满足以上条件并且绘制更快;需要算法将任意多边形剖分为三角形。

  1. 三角剖分的过程:
    (1)细长三角形绘制效果不逼真,因此应当尽量避免使用细长的三角形绘制。也就是对细长的三角形进行剖分。
    (2)相对来说,相同大小的三角形绘制效果更好。也就是应当尽可能产生相同大小的三角形。
    (3)剖分时要最大化原先的最小角。
    (4)使用递归的方式进行剖分。——缺点:凹多边形剖分会出错;解决方法——添加限制,比如,从最左边的顶点开始分割。





作者:艾孜尔江

原文地址:https://www.cnblogs.com/ezhar/p/13872844.html