1.1计算机图形学概念

1.是什么

        是一种使用数学算法将二维或三维图形转换为计算机显示器所能显示的二维栅格形式的科学(2D/3D→数学算法→能显示的二维栅格)。

栅格:

 

                本质上电脑上看见的都是2D

 2.研究什么

        建模Modeling——构造场景三维模型——表示为一堆三角面片的集合(例:三角兔子)

        绘制(渲染)Rendering——将三维场景画在屏幕上——本质是计算像素点的颜色,实际就是给建出来的东西加上颜色光线材质什么的

        动画Animation

1.2图形与图像的区别

1.概念

        图像:一堆像素组形成的二维栅格

        图形:含有表示“形”的几何信息(图形中也会有图像的部分)

 

2.关系

        图形的显示最终要转化为图像

        图形中的纹理就是图像

3.几个学科

        计算机图形学:三维模型→绘制→二维图像

        数字图像处理:二维图像→分析处理→其他的信息或生成某种特效

        计算机视觉:二维图像→分析处理→三维信息

1.3图形流水线

 

  1. Rendering绘制方式

        (1).逐像素绘制

        假设从人到被观察物体之间有一条射线,中间有一个光栅网格,逐像素绘制可以理解为把我看到的东西计算每一个像素的颜色一个个pia到光栅网格上,就这么一个个对应然后画个完整的

 

        (2).逐面片绘制

        以物体的的面片为入手点,对每一个面片有一个投影投到屏幕上,使之变为了一个二维的三角形,对其进行光栅化的处理(计算像素),然后计算每个像素的颜色

 

        逐面片绘制使用的更多也更流行,因为绘画速度快,这种绘制成熟到形成了一条固定步骤,这就是图形流水线

2.逐面片绘制

        (1).模型都有许多面片组成,一个三角形一个三角形来处理

        (2).逐面片地进行投影(3D→2D)、光栅化(计算面片所覆盖的栅格)

3.图形流水线概念的引出

        (1).在计算机中将3D模型转化为屏幕上的图像需要经过的一系列处理步骤

        (2).1992年,SGI发布OpenGL1.0,图形流水线逐渐形成业界标准(因为之前没有一个特别高效好用的图形包,OG出了之后人们觉得惊为天人,不用别的了)

        (3).1994出现PC显卡,1999出现GPU,图形流水线逐渐硬化到了PC机专用的图形硬件上来实现(94年之前在CPU上,94出了显卡)

4.流水线总览

 

变换:几何变换、投影、剪裁、视口变换

1.4图形开发库

  1. 三维图形开发相关的库

        基础图形库(函数库):OpenGL、Driect3D

        辅助OpenGL开发的工具库(辅助调用):aux、glut、freeflut、glfw

        辅助调用OpenGL扩展功能库(一些扩展功能要靠扩展函数来提供,此时要调用这些):glew、glad

        基于OpenGL进行轻量级开发的库(将基础-库进行封装的库):bgfx

        用OpenGL做界面的库:myGUI、CEGUI

        三维图形引擎:OSG、OGRE

   2.OpenGL

        调用图形硬件的程序接口,因为应用程序直接调用图形显卡驱动很困难,OpenGL相当于在其中加了一层辅助打交道,大约有150个函数组成

        1992发布→1.0确定了流水线雏形→现在是图形编程的业界标准之一

   3.OpenGL与Direct3D

        Direct3D在游戏界占优、OpenGL跨平台、两者背后是同样的图形流水线、其他的三维图形库都基于二者之上

   4.辅助OpenGL开发的工具库

        aux,glut→freeglut,glfw

        ·提供了管理窗口功能

        ·加入了键盘、鼠标等的交互接口

        ·可能还提供了右菜单等交互功能

        ·提供了一些“高级”建模函数

1.5 GPU

        ·GPU是显卡中的核心芯片

        ·GPU用来处理屏幕显示相关的计算并实现图形流水线

        ·GPU已经成为计算机中发展最快的部分

        ·GPU比CPU更快,GPU是并行的,但是不如CPU通用灵活,现在的GPU变得越来越灵活,具有了可编程功能和统一渲染框架,CPU是为了通用而计算

1.6 GPU中图形流水线的发展及shader编程

1.发展

 

        ·固定流水线模式不够灵活,2002年起,GPU在Vertex Operations(顶点处理)和Fragment Operations(像素颜色)在这两个模块具有了可编程功能

        ·Vertex shader中编程控制顶点的各种属性,CPU可以直接把模型发给GPU,然后由Vertex shader来进行计算

        Vertex shade of GPU,可直接在Vertex shade编程控制个顶点的属性,如果没有shade编程,就要由CPU计算,使得CPU必须频繁的与GPU交流,效率大大降低,CPU也会很累

        使用Vertex shade处理,不仅可以提高效率、不用频繁的传数据,又可以直接提高运算的速度

        ·省去了数据传输耗费的时间

        ·GPU是并行计算,如果并行的好,计算效率会很高

        ·Fragment shader中编程控制片元、像素的各种属性

        ·2006出现了新模块Geometry shader,可以生成新顶点新面片,在GPU中计划我们的模型

 

        ·统一渲染构架,变得更通用了

        2.GPU编程

Cg、HLSL、GLSL、shader编程

更多推荐

图形编程技术笔记整理1.1-1.6