计算机图形学 订阅
计算机图形学(Computer Graphics,简称CG)是一种使用数学算法将二维或三维图形转化为计算机显示器的栅格形式的科学。简单地说,计算机图形学的主要研究内容就是研究如何在计算机中表示图形、以及利用计算机进行图形的计算、处理和显示的相关原理与算法。 展开全文
计算机图形学(Computer Graphics,简称CG)是一种使用数学算法将二维或三维图形转化为计算机显示器的栅格形式的科学。简单地说,计算机图形学的主要研究内容就是研究如何在计算机中表示图形、以及利用计算机进行图形的计算、处理和显示的相关原理与算法。
信息
提出时间
1963年1月
起源地点
MIT林肯实验室
简    称
CG
中文名
计算机图形学
创始人
萨瑟兰
外文名
Computer Graphics
计算机图形学历史发展
1963年1月,MIT林肯实验室24岁的萨瑟兰完成了关于人机通信的图形系统的博士论文。萨瑟兰引入了分层存储符号的数据结构,开发了交互技术,可以用键盘和光笔实现定位、选项和绘图,还提出了至今仍在沿用的许多图形学的其他基本思想和技术。萨瑟兰的博士论文被认为既是计算机图形学的奠基,也是现代计算机辅助设计之肇始。20世纪70年代,由于光栅显示器的诞生,光栅图形学算法迅速发展起来;基本图形操作和相应的算法纷纷出现,图形学进入了第一个兴盛时期。70年代,很多国家应用计算机图形学,开发CAD图形系统,并应用于设计、过程控制和管理、教育等方面。80年代中期以来,大规模集成电路使计算机硬件性能提高,图形学得到飞速的发展。1980年,第一次给出了光线跟踪算法。真实感图形的算法逐渐成熟。80一90年代,图形学更加广泛地应用于动画、科学计算可视化、CAD/CAM、虚拟现实等领域。这向计算机图形学提出了更高、更新的要求——真实性和实时性。 [1] 
收起全文
精华内容
下载资源
问答
  • 计算机图形学

    2015-06-13 15:33:25
    计算机图形学
  • 计算机图形学书籍.PRT计算机图形学书籍.PRT计算机图形学书籍.PRT计算机图形学书籍.PRT
  • 计算机图形学 计算机图形学 计算机图形学
  • 计算机图形学

    千次阅读 2009-08-14 10:25:00
    计算机图形学 编辑 | 删除 | 权限设置 | 更多▼ 设置置顶 推荐日志 转到私密记事本 转载自 水月洞天 转载于2009年03月24日 12:06 阅读(3) 评论(0) 分类: 个人日记 权限: 公开 曲线与曲面的表示曲线与曲面 曲线分为...
     计算机图形学 
    编辑 | 删除 | 权限设置 | 更多▼ 设置置顶
     
    推荐日志
     
    转到私密记事本
     转载自 水月洞天    转载于2009年03月24日 12:06 阅读(3) 评论(0) 
    分类: 个人日记 权限: 公开  
     曲线与曲面的表示
    曲线与曲面 
      曲线分为规则曲线和拟合曲线(不规则曲线)两大类。所谓规则曲线就是具有确定描述函数的曲线,如圆锥曲线、正弦曲线、渐开线等。由离散点的特征点(或称为型值点)构造函数来描述的曲线称为拟合曲线,也称自由曲线。对于同样的特征点,由于构造函数的方法不同,因而出现了读诸如最小二乘法拟合曲线、三次参数曲线、Bezier曲线、B样条曲线等众多曲线。 
      曲面也分为规则曲面和拟合曲面(不规则曲面)两大类。规则曲面就是具有确定描述函数的曲面,如圆柱、圆锥、圆球等回转曲面、螺旋曲面等。由离散特征点构造函数来描有述的曲面称为拟合曲面,也称自由曲面。如Coons曲面、Bezier曲面、B样条曲面等。 
    插值与逼近 
      给定一组有序的数据点Pi, i=0,1,...n, 这里的数据点可以是通过实验、测量或计算得到的。要求构造一条曲线经过这些数据点,称为对这些数据点进行插值(interpolation),所构成的曲线称为插值曲线,这些数据点若原来位于某曲线上,则称该曲线为被插曲线。构造插值曲线所采用的数学方法称为曲线插值法。把曲线插值推广到曲面,类似地就有插值曲面、被插曲面与曲面插值法的概念。 
      在某些情况下,实验、测量或计算得到的数据点本身就很粗糙,要求构造一条曲线严格通过给定的一组数据点就没有什么意义。更为合理的做法是,构造一条曲线使之在某种意义下最为接近给定的数据点,称之为对这些数据进行逼近(approximation),所构造的曲线称为逼近曲线。这些数据点若原来位于某条曲线上,则称该曲线为被逼曲线。构造逼近曲线所采用的数学方法称为曲线逼近法。类似地可将曲线逼近推广到曲面。 
      插值与逼近统称为拟合。 
    Bezier曲线 
      Bezier曲线是法国雷诺汽车公司工程师Bezier于1962年创立的。Bezier的方法是用折线组成的多边形来定义一条曲线,设计者先用折线多边形描绘这条曲线的大致轮廓,再用Bezier曲线的表达式产生一条光滑的曲线。若达不到要求再改变多边形顶点位置,直到构造出满意的曲线为止。因此,Bezier曲线直观、形象,数学方法简便。 
      Bezier曲线虽然有很多优点,但也有一些不容忽视的缺点。如修改一个顶点会影响整段曲线的形状,局部修改力差;Bezier曲线离特征多边形较远,逼近性不是很好;特征多边形顶点增多时,曲线阶次增高,给计算带来不便。 
    B样条曲线 
      20世纪70年代初期,Riesenfeld等人受到Bezier方法的启示,把B样条函数作一拓展,从而形成了B样条曲线。B样条曲线继承了Bezier曲线的优点,同时又克服了其缺点,已成为目前在CAGD(计算机辅助几何设计)中最受设计者欢迎的工具。 
    由于构造B样条曲线时所采用的基函数不同,B样条有多种,如均匀B样条、非均匀B样条、均匀有理B样条、非均匀有理B样条(Non-Uniform Rational B-Spline, NURBS)等。 
      均匀B样条曲线中的B样条函数采用等距参数节点,由此形成的B样条曲线具有简单、直观、易用的特点。通常所说的B样条函数多数是指均匀B样条曲线。 
      NURBS正日益受到设计人员重视,其特点是可用统一的数学形式精确表示分析曲线(如直线、圆锥曲线等)和自由曲线(如均匀B样条曲线等),因而便于用统一的数据库管理、存储,程序量大减少;NURBS定义中的权因子使外形设计理加灵活,设计人员通过调整具有几何意义的点、线、面元素即可达到预期的效果。鉴于NURBS的强大功能,1991国际标准化组织(ISO)正式颁布了工业产品几何定义的STEP标准,其中,自由曲线、曲面惟一地用NURBS表示。 
       在做轮廓跟踪的项目时,为了算法的简便有效,采用均匀B样条曲线,并考虑到开放曲线和闭合曲线两种情况。
    
    判断一个点是在多边形内还是形外
    今天写程序碰到一个几何问题:给定一个多边形的每个顶点的坐标和任意一个点的坐标,如何判断这个点是在这个多边形的内部还是外部?[假设点在多边形的边上也归属为在形内的一种特殊情况] 
    我思考了好长时间,最后把这个问题归结为:给定一个三角形的三个顶点的坐标和任意一个点的坐标,如何判断这个点是在三角形内部还是外部? 
    我的思路是:先通过对各个顶点求平均,得到一个中心点,这个中心点和每个边组成三角形,只要所给的点在任意一个三角形内,则这个点就在多边形内。  
    我比较了几种可行的方法,发现下面这种方法是最简单、最可行。 
    假设O是所给的任意点,其实就是判断这三个条件是否同时成立: 
    O,C是否在AB同侧? 
    O,A是否在BC同侧? 
    O,B是否在AC同侧? 
    如何判断O,C是否在AB同侧呢?我采用的方法是:先利用AB所在直线的两点式求出该直线的一般式Ax+By+C=0,然后分别将点O和点C的坐标代入该式左边即Ax+By+C,只要所得结果同号即可,即判断该条件是否成立:(Axo+Byo+C)*(Axc+Byc+C)>=0?  
    C++结合OpenCV的实现如下: 
    BOOL pointTriangleTest(CvPoint2D32f point0, CvPoint2D32f point1, CvPoint2D32f point2, CvPoint2D32f pointX) 
    { 
         double A1 = point1.y-point0.y; 
         double B1 = point0.x-point1.x; 
         double C1 = point1.x*point0.y-point0.x*point1.y; 
         double A2 = point2.y-point1.y; 
         double B2 = point1.x-point2.x; 
         double C2 = point2.x*point1.y-point1.x*point2.y; 
         double A3 = point0.y-point2.y; 
         double B3 = point2.x-point0.x; 
         double C3 = point0.x*point2.y-point2.x*point0.y; 
    if( (A1*pointX.x+B1*pointX.y+C1)*(A1*point2.x+B1*point2.y+C1)>=0 
          && (A2*pointX.x+B2*pointX.y+C2)*(A2*point0.x+B2*point0.y+C2)>=0 
          && (A3*pointX.x+B3*pointX.y+C3)*(A3*point1.x+B3*point1.y+C3)>=0 ) 
       { 
          return TRUE; 
       } 
    else 
       { 
          return FALSE; 
       } 
    }  
    
    展开全文
  • 计算机图形学英文版

    2018-04-16 19:34:47
    计算机图形学计算机图形学计算机图形学计算机图形学计算机图形学计算机图形学计算机图形学
  • 计算机图形学图形旋转 计算机图形学| 回转 (Computer Graphics | Rotation) Rotation is a type of transformation that is very often used in computer graphics and image processing. Rotation is a process of ...

    计算机图形学图形旋转

    计算机图形学| 回转 (Computer Graphics | Rotation)

    Rotation is a type of transformation that is very often used in computer graphics and image processing. Rotation is a process of rotating an object concerning an angle in a two-dimensional plane.

    旋转是计算机图形和图像处理中经常使用的一种转换类型。 旋转是使物体在二维平面中旋转一定角度的过程。

    It is a process of changing the angle of the object which can be clockwise or anticlockwise, while we have to specify the angle of rotation and rotation point. A rotation point is also called a pivot point.

    这是改变对象角度的过程,可以顺时针或逆时针旋转,同时我们必须指定旋转角度和旋转点。 旋转点也称为枢轴点。

    There are two types of rotations according to the direction of the movement of the object. These are:

    根据对象运动的方向,有两种旋转类型。 这些是:

    • Anti-clockwise rotation

      逆时针旋转

    • Clockwise rotation

      顺时针旋转

    The positive value of the rotation angle rotates an object in an anti-clockwise direction while the negative value of the rotation angle rotates an object in a clockwise direction. When we rotate any object, then every point of that object is rotated by the same angle. For example, a straight line is rotated by the endpoints with the same angle and the line is re-drawn between the new endpoints. Also, the polygon is rotated by shifting every vertex with the help of the same rotational angle. Same for circle also, it can be obtained by center position by the specified angle.

    旋转角的正值使物体沿逆时针方向旋转,而旋转角的负值使物体沿顺时针方向旋转。 当我们旋转任何对象时,该对象的每个点都旋转相同的角度。 例如,一条直线由端点以相同的角度旋转,并且在新端点之间重新绘制该线。 同样,通过在相同旋转角度的帮助下移动每个顶点来旋转多边形。 圆也一样,可以通过中心位置指定角度来获得。

    Let's now consider a point object O which has to be rotated from one angle to another.

    现在考虑必须从一个角度旋转到另一个角度的点对象O。

    • Initial co-ordinates of the object O = (Xold, Yold)

      对象的初始坐标O =(X old ,Y old )

    • Initial angle of the object O with respect to origin = Φ

      物体O相对于原点的初始角度=Φ

    • Rotation angle = θ

      旋转角度=θ

    • New co-ordinates of the object O after rotation = (Xnew, Ynew)

      旋转后对象O的新坐标=(X new ,Y new )

    Rotation

    In order to rotate an object, we need to rotate each vertex of the figure individually. More clearly let us assume a point P, on rotating a point P(x, y) by an angle A about the origin we get a point P' (x', y'). The calculation of values of x' and y' are as follows,

    为了旋转对象,我们需要分别旋转图形的每个顶点。 更清楚地让我们假设一个点P ,将点P(x,y)绕原点旋转角度A ,我们得到一个点P'(x',y')x'y'的值的计算如下:

    We know that,

    我们知道,

        x   = r cosB, y = r sinB
        x'  = r cos ( A + B)
            = r ( cosA cosB – sinA sinB ) 
            = r cosB cosA – r sinB sinA 
            = x cosA – y sinA
        y'  = r sin ( A + B ) 
            = r ( sinA cosB + cosA sinB )  
            = r cosB sinA + r sinB cosA 
            = x sinA + y cosA
    
    

    It's representation in matrix form will be as follows,

    它以矩阵形式表示如下,

    Rotation

    Now let's understand this by using an example,

    现在让我们通过一个例子来理解这一点,

    Problem Statement: Given a triangle with corner coordinates (0, 0), (1, 0) and (1, 1). Rotate the triangle by 90 degrees anticlockwise direction and find out the new coordinates.

    问题陈述:给定一个三角形,其角坐标为(0,0),(1、0)和(1,1)。 将三角形逆时针旋转90度,找出新坐标。

    Solution:
    We always rotate a polygon by rotating each of its vertexes with the same rotation angle.

    解:
    我们总是通过以相同的旋转角度旋转多边形的每个顶点来旋转多边形。

    Given,

    鉴于

    • Old corner coordinates of the triangle = A (0, 0), B (1, 0), C (1, 1)

      三角形的旧角坐标= A(0,0),B(1,0),C(1,1)

    • Rotation angle = θ = 90º

      旋转角度=θ=90º

    For the Co-ordinate A (0, 0)

    对于坐标A(0,0)

    Let the new coordinates of corner A after rotation = (Xnew, Ynew).

    令旋转后角A的新坐标=(X new ,Y new )。

    When we apply the rotation equation, we get-

    当我们应用旋转方程式时,我们得到-

    Xnew = Xold x cosθ – Yold x sinθ

    X = X xcosθ– Y xsinθ

             = 0 x cos90º – 0 x sin90º

    = 0 xcos90º– 0 xsin90º

             = 0 + 0

    = 0 + 0

             = 0

    = 0

    Ynew = Xold x sinθ + Yold x cosθ

    Y new = X old xsinθ+ Y old xcosθ

            = 0 x sin90º + 0 x cos90º 

    = 0 xsin90º+ 0 xcos90º

           = 0 + 0

    = 0 + 0

           = 0

    = 0

    Thus, the new co-ordinates of corner A we get after rotation is = (0, 0).

    因此,旋转后我们得到的角A的新坐标为=(0,0)。

    For the Coordinate B (1, 0)

    对于坐标B(1、0)

    Let the new coordinates of corner B after rotation = (Xnew, Ynew).

    令旋转后角B的新坐标=(X new ,Y new )。

    Xnew = Xold x cosθ – Yold x sinθ

    X = X xcosθ– Y xsinθ

            = 1 x cos90º – 0 x sin90º

    = 1 xcos90º– 0 xsin90º

            = 0 – 0

    = 0 – 0

            = 0

    = 0

    Ynew = Xold x sinθ + Yold x cosθ

    Y new = X old xsinθ+ Y old xcosθ

            = 1 x sin90º + 0 x cos90º

    = 1 xsin90º+ 0 xcos90º

           = 1 + 0

    = 1 + 0

           = 1

    = 1

    Thus, the new co-ordinates of corner B that we get after rotation are = (0, 1).

    因此,旋转后得到的角B的新坐标为=(0,1)。

    For the Coordinate C (1, 1)

    对于坐标C(1,1)

    Let the new coordinates of corner C after rotation = (Xnew, Ynew).

    令旋转后角C的新坐标=(X new ,Y new )。

    Xnew = Xold x cosθ – Yold x sinθ

    X = X xcosθ– Y xsinθ

             = 1 x cos90º – 1 x sin90º

    = 1 xcos90º– 1 xsin90º

             = 0 – 1

    = 0 – 1

             = -1

    = -1

    Ynew = Xold x sinθ + Yold x cosθ

    Y new = X old xsinθ+ Y old xcosθ

            = 1 x sin90º + 1 x cos90º

    = 1 xsin90º+ 1 xcos90º

            = 1 + 0

    = 1 + 0

            = 1

    = 1

    Thus, the new co-ordinates of corner C we get after rotation is = (-1, 1).

    因此,旋转后得到的角C的新坐标为=(-1,1)。

    Thus, the new co-ordinates of the triangle after rotation are = A (0, 0), B (0, 1), C (-1, 1).

    因此,旋转后三角形的新坐标为= A(0,0),B(0,1),C(-1,1)。

    翻译自: https://www.includehelp.com/computer-graphics/rotation.aspx

    计算机图形学图形旋转

    展开全文
  • 计算机图形学 面试题

    2018-06-27 17:11:20
    计算机图形学 面试题 计算机图形学 面试题 计算机图形学 面试题 计算机图形学 面试题
  • 计算机图形学基础

    千人学习 2017-09-28 22:30:43
    该课程是计算机图形领域的基础的课程,包含了计算机图形学的数学原理,例如在计算机图形学中的重要坐的标变换的原理。该课程也是游戏开发、VR/AR等开发的基础课程。在该课程中除了讲授数学原理,还包括了C++实践,...
  • Lec01 计算机图形学概述 笔记参考这里:学习笔记:GAMES101-现代计算机图形学入门 视频课程是这个:GAMES101-现代计算机图形学入门-闫令琪 原教学网站:GAMES101: 现代计算机图形学入门 作业网站:计算机图形学与...

    Lec01 计算机图形学概述

    笔记参考这里:学习笔记:GAMES101-现代计算机图形学入门

    视频课程是这个:GAMES101-现代计算机图形学入门-闫令琪

    原教学网站:GAMES101: 现代计算机图形学入门

    作业网站:计算机图形学与混合现实研讨会

    参考书:《Fundamentals of Computer Graphics (4th Edition)》

    什么是计算机图形学

    Computer Graphics定义:使用计算机合成并操控视觉信息

    和计算机视觉的区别与联系:

    计算机图形:模拟真实世界、创造虚拟世界

    计算机视觉:从图像或多维数据中“感知”

    为什么要学习计算机图形学

    应用:Video Games / Movies / Animations / Design / Visualization / Virtual Reality / Augmented Reality / Digital Illustration / Simulation / Graphical User Interfaces / Typography

    全局光照(亮度)是评判一个游戏画面优劣的关键。

    特效往往是最简单的(普通人无法判断正确与否)。

    文字设计(Typography)使用“The quick brown fox jumps over the lazy dog”检验26个字母。

    AND, OF COURSE, CG IS AWESOME!

    课程讨论的话题

    • 光栅化(Rasterization)
    • 曲线和网格(Curves and Meshes)
    • 光线追踪(Ray Tracing)
    • 动画/仿真(Animation / Simulation)

    注意!本课程不讲授图形API、建模软件、游戏引擎、计算机视觉相关的知识!

    最后一个建议:

    展开全文
  • 计算机图形学.zip

    2020-06-03 09:02:54
    计算机图形学的相关代码。本源码致力于从基础开始接触计算机图形学,从二维到三维,从简单到困难。从而帮助有需要学习计算机图形学的相关人员的能力提升。
  • 中点画圆算法 计算机图形学 中点画圆算法 计算机图形学 中点画圆算法 计算机图形学 中点画圆算法 计算机图形学
  • 计算机图形学导论

    千次阅读 多人点赞 2018-10-12 22:42:46
    计算机图形学概念 1.1什么是计算机图形学?(Computer Graphics) 关于计算机图形学的定义众说纷纭。 IEEE 对计算机图形学的定义为:Computer graphicsis the art or science of producing graphical images with...

     

    一.计算机图形学概念

    1.1什么是计算机图形学?(Computer Graphics)

    关于计算机图形学的定义众说纷纭。

    IEEE 对计算机图形学的定义为:Computer graphicsis the art or science of producing graphical images with the aid of computer。

    国际标准化组织 ISO 将计算机图形学定义为:计算机图形学是一门研究通过计算机将数据转换成图形,并在专门显示设备上显示的原理方法和技术的学科。它是建立在传统的图学理论、应用数学及计算机科学基础上的一门边缘学科。

    总而言之计算机图形学是研究怎样利用计算机来显示、生成和处理图形的原理、方法和技术的一门学科,这里的图形是指三维图形的处理。

    1.2图形和图像

    图形和图像辨析

    计算机图形学(computer graphics)的基本含义是使用计算机通过算法和程序在显示设备上构造图形。图形是人们通过计算机设计和构造出来的,不是通过摄像机、扫描仪等设备输入的图像。这里的图形可以是现实中存在的图形,也可以是完全虚拟构造的图形。以矢量图的形式呈现,更强调场景的几何表示,记录图形的形状参数与属性参数。例如,工程图纸,其最基本的图形单元是点、线、圆/弧等,其信息包含图元的几何信息与属性信息(颜色、线型、线宽等显式属性和层次等隐式属性)。

    图像处理(image processing)则是研究图像的分析处理过程,图像处理研究的是图像增加、模式识别、景物分析等,研究对象一般为二维图像。图像以点阵图形式呈现,并记录每个点的灰度或色彩。例如,照片、扫描图片和由计算机产生的真实感和非真实感图·形等, 最基本的图像单元(pels,picture elements)是点—像素(pixel),其信息实际上是点与它的属性信息(颜色、灰度、亮度等)。

     

    1.3计算机图形学发展

    • 20 世纪 50 年代:1946 年 2 月 14 日,世界上第一台电子计算机ENIAC在美国宾夕法尼亚大学问世,1950 年第一台图形显示器诞生于麻省理工学院,从此计算机具有了图象显示功能,也开启了图形显示与计算机技术联系的桥梁。

    • 20 世纪 60 年代:1962 年美国 MIT 林肯实验室的 Ivan E.Sutherland 发表了一篇题为“sketchpad:一个人机交互通信的图形系统”的博士论文,首次使用了“Computer Graphics” 这一概念,证明了交互式计算机图形学是一个可行的、有应用价值的研究领域,从而确立了计算机图形学正式成为一个独立学科的分支。随着光栅显示器的诞生,对光栅图形学算法的研究迅速地发展壮大起来,大量基本概念以及相应的算法应运而生。

    • 20 世纪 70 年代:图形学在这一时期进入了兴盛期,光栅图形学算法迅速发展,区域填充、裁剪、消隐等概念及其相应算法纷纷被提出,实用的 CAD 图形系统也开始出现。除此之外,真实感图形学和实体造型技术的产生也是 70 年代计算机图形学的两个重要进展。

    • 20 世纪 80 年代以后:出现了带有光栅扫描显示器的微型计算机和图形工作站,极大的推动了计算机图形学的发展,如 Machintosh、IBM 公司的 PC 及其兼容机,Apollp、Sun 工作站等。随着奔腾 III 和奔腾 IV 系列 CPU 的出现,计算机图形软件功能一开始部分地由硬件实现。高性能显卡和液晶显示屏的使用,高传输率大容量硬盘的出现,特别是 Internet 的普及使得微型计算机和图形工作站在运算速度、图形显示细节上的差距越来越小,这些都为图形学的飞速发展奠定了物质基础。

    • 20 世纪 90 年代以后:微机和软件系统的普及使得图形学的应用领域日益广泛,计算机图形学朝着标准化、集成化和智能化的方向发展,多媒体、人工智能、计算机可视化、虚拟现实等分支蓬勃发展,三维造型也获得了长足发展。ISO 公布的图形标准越来越精细,更加成熟。这是存在着一些事实上的标准,如 SGI 公司开发的 OpenGL 开放式三维图形标准,微软公司为PC 游戏开发的应用程序接口标准DirectX 等,Adobe 公司 Postscript 等,均朝着开放式、高效率的方向发展。

     

    二.计算机图形学总体框架

    数学基础:主要包括一些基本的算法,例如向量与几何的变换,如几何建模时的三维空间变换、绘制时的三维到二维的投影变换和二维空间的窗口和视图变换等。

    建模:三维和二维空间的各种几何模型,有解析式表达的简单形体,也有隐函数表达的复杂曲线等。建模的主要工作是几何计算。

    渲染:或者叫做绘制,指的是模型的视觉实现过程,计算机图形学的光照、纹理等理论和算法都需要对模型进行处理,其中也要用到大量的几何计算。

    交互技术:如今的交互式图形学已经可以提供图形通讯手段,成为图形交互的主要工具。几何计算贯穿于以上各个过程之中,是计算机图形学的基础。在图形学中那些看上去是“绘制”的内容,本质上仍是几何计算的问题。例如隐藏线、隐藏面的消除以及具有光照效果的真实感图形显示虽是提升图形显示效果的手段,但其主要的工作恰是几何计算。Gourand 插值模型(通过对多边形顶点颜色进行线性插值来绘制其内部各点)和 Phong 插值模型(对多边形顶点的法线方向进行插值以产生中间各点的法线方向)的实质均是几何插值问题;光线跟踪的工作和时间花费主要是几何计算-光线与景物的求交计算及交点处景物表面的法向、反射光线与折射光线的方向计算等。

     

    2.1 建模

    没有模型,图形就无从谈起,建模是计算机图形学各项工作的基础和前提,建模技术的核心是根据研究对象的三维空间信息构造其立体模型,尤其是几何模型,并利用相关建模软件或编程语言生成该模型的图形显示,然后对其进行处理。目前,物体的三维几何模型就其复杂程度来说可以分为三类:线模型、面模型和体模型。对三维建模技术的研究基本上都是针对三维面元模型和体元模型来展开的。

     

    2.2 渲染

    计算机图形学的一项主要工作是将计算机中抽象的模型转换为人们直观可见、可以形象理解的图形。它综合利用数学、物理学、计算机等知识,将模型的形状、物理特性(如材料的折射率、反射率、物体发光温度等,机械强度、材料密度等对运动模拟的影响等),以及物体间的相对位置、遮挡关系等性质在计算机屏幕上模拟出来,是一个将“几何”演绎到画面上的再创造过程,这就是渲染,也叫绘制。

    2.2.1什么是渲染?

    当需要把模型或者场景输出成图像文件、视频信号或者电影胶片时就需要用到渲染

    (Render)。渲染是指软件由模型生成图像的过程。模型是用语言或者数据结构进行严格定义的三维物体或虚拟场景,它包括几何、视点、纹理、照明等信息。图像是数字图像或者位图图像。除去后期制作,渲染是计算机图形处理的最后一道工序,通过它得到模型与动画的最终显示效果。实现渲染依靠多种软件,如各种 CG 软件自带渲染引擎、RenderMan 等。

    随着计算机图形学的不断深入发展,渲染的应用领域越来越广泛:计算机与视频游戏、模拟、电影或者电视特效以及可视化设计。作为产品来看,现在已经有各种不同的渲染工具产品,有些集成到更大的建模或者动画工具中,有些是独立产品,有些是开放源代码的产品。从内部来看,渲染工具都经过了仔细的设计,其理论基础是光学、视觉感知、数学以及软件开发等各种科学理论。

    2.2.2渲染技术有哪些?

    扫描线渲染与栅格化:扫描线渲染是一行一行进行的一项技术和算法集。所有待渲染的多边形首先按照顶点 y 坐标出现的顺序排序,然后使用扫描线与列表中前面多边形的交点计算图像的每行或者每条扫描线,在活动扫描线逐步沿图像向下计算的时候更新列表。这种方法的一个优点是没有必要将主内存中的所有顶点都转到工作内存,只有与当前扫描线相交边界的约束顶点才需要读到工作内存,并且每个定点数据只需读取一次。主内存的速度通常远远低于中央处理单元或者高速缓存,避免多次访问主内存中的顶点数据,就可以大幅度地提升运算速度。

    栅格化又叫光栅化,是将几何数据经过一系列变换后最终转换为像素,从而呈现在显示设备上的过程。栅格化将顶点数据转换为片元,片元中的每一个元素对应于帧缓冲区中的一个像素。如下图。

     

    光线投射:从不同视角观察场景,并根据几何与反射强度的基本光学原理计算观察到的图像,这就是光线投射。光线投射算法的基本思想是从视平面每个像素发出一条光线,穿过体数据,基于最基本的光线吸收和发射模型,沿着光线方向对颜色和阻光度进行积累。当光线与物体交叉的时候,交叉点的颜色可以用几种不同的方法来计算。其中最简单的方法是用交叉点处物体的颜色表示该点的实际颜色;也可以用纹理映射的方法来确定;一种更加复杂的方法是依据局部光照模型进行计算。为了减少人为误差,可以对多条相邻方向的光线进行平均。另外的一些计算涉及到从光源到物体的入射角,以及根据光源的强度计算像素的亮度值。

    光线投射算法从视点发出一组光线,对光线经过的三维数据集上的数据可以间隔均匀地采样,与人类真实视觉相似,适用于透视投影。因此光线投射主要被用于实时模拟场景下, 例如三维计算机游戏以及动画等,这类场景往往对细节不太重视而且通过人为制造细节可以得到更好的表现效果。

    辐射着色:辐射着色是模拟反射光线如何反射到它表面以及如何照亮周围环境的方法。这种方法可以生成较为真实的浓淡效果,并且更加易于捕捉室内场景的环境光。这种模拟的光线基础是特定物体表面某一点的漫反射的光线散布在很大的方向范围内并且会照亮周围 的环境。 各种模拟技术的复杂性可能会有所不同。许多渲染方法所用的辐射着色模型都非常原始, 它们只是简单地根据环境因数变化照亮整个场景。但是当高级的辐射着色与高质量的光线跟 踪算法组合在一起使用的时候,它们能够生成相当真实的图像,尤其是对于室内场景更是这样。在高级的辐射着色模拟中,递归的有限元分析算法不断地将光线在模型表面之间来回反射,直到达到一定的递归条件为止。这样一个表面的色彩就会影响其它相邻表面的色彩,反之亦然。整个模型的照明结果会被保存起来,在光线投射或者光线跟踪模型中作为输入使用。由于这项技术的递归特性,所以对于复杂物体的模拟速度非常缓慢。一些先进的辐射着色计算方法可能只计算房间中从墙面、地板与房顶反射的环境光,而并不计算复杂物体反光对于辐射着色的影响,或者在辐射着色计算中使用同样尺寸及纹理的简单物体取代复杂物体。如果场景中运动的辐射着色物体很少,那么可以在多帧画面中重复使用同样的辐射着色数据。

    光线跟踪:类似于光线投射,但是光线跟踪使用了更加先进的光学模拟方法,并且通常使用蒙特·卡罗方法以实现更加真实的结果,不过这样做的代价通常是速度的大幅度降低。

    光线跟踪是比其他渲染方法如扫描线渲染等更加能够实现的模拟光线,因此像反射和阴影这样一些需要复杂精确渲染的效果,就需要光线跟踪算法来实现。因此,在要求高质量渲染效果的光线跟踪中,通常每个像素都需要采样多条光线,并且不仅是跟踪到第一次相交, 而是需要按照“入射角等于反射角”这样的光学定律以及更加高级的处理折射与粗糙表面反射的定律处理多次连续反射。一旦光线遇到光源更可能出现的是光线反射次数已经达到设定的限制,那么最终点的表面照明就通过上面的方法确定下来,并且经过多次反射发生的变化也可以估计在观察点看到的亮度。每个采样点、每个像素都要重复这个过程。在有些场合中每个交点可能生成多条光线。

    作为一种非常有效的方法,光线跟踪的处理速度很慢,但也在一些需要高真实感效果的场合下得到应用,例如电影制作、广告制作等。此外,简化的光线跟踪方法可以广泛应用于不需要高质量细节的场合。目前已经出现了一些处于原型阶段硬件加速的光线跟踪设备,在一些游戏演示中也有实时软件或者硬件光线跟踪的应用。

     

    2.3 图形交互

    l 几何约束 :几何约束可以用于对图形的方向、对齐方式等进行规定和标准。

    l 引力场 :

    引力场可以看作是一种定位约束,通过在特定点周围假想有一个区域,当光标中心落在这个区域内时,会自动地被直线上最近的一个点代替。就像一个质点进入直线周围的引力场,然后被吸引到这条直线上去一样。引力场的大小要适中,太小了不容易进入引力区,太大了线和线的引力区相交,光标在进入引力区相交部分有可能会被吸引到不希望选的线段上去,增大误接的概率。

    l 拖动 :要把一个对象移动到一个新的位置时,如果不是简单地用光标指定新位置的一个点,而是用光标移动时拖动着被移动的对象,会使用户感到更直观,并且可以使对象放置的位置更恰当。

    l 橡皮筋技术 :

    被拖动对象的形状和位置随着光标位置的不同而变化,是一个不断地进行画图—擦除— 画图的过程。

    ①从起点到光标中心点(x,y)处画图

    ②擦除起点到光标中心点(x,y)处的图形

    ③光标移动到新的位置:x=x+△x,y=y+△y

    ④转第①步,重复这个过程,直到按下确认键。

    l 操作柄技术 :

    可以用来对图形图像进行缩放、旋转、错切等几何变换。先选择要处理的图形对象,该图形对象的周围会出现操作柄,移动或者旋转操作柄就可以实现相应的变换。

     

    2.4几何计算

     

    三.计算机图形学著名公司

    展开全文

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 12,531
精华内容 5,012
关键字:

计算机图形学