IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    3D图形技术

    cfylee发表于 2015-02-07 10:06:22
    love 0

    随着工作的逐渐深入,要理解GPU的工作原理,不学习3D图形技术是不行,自己也发现工作中调试GPU驱动比较困难的原因是由于自己图形图像方面的知识匮乏导致,对当代GPU的发展不了解,对可编程渲染管线,着色器等当代GPU的发展方向没有一个清晰的认识,我打算从openGL这套图形API开始学习图形图像的知识,帮助自己的工作顺利进行,也将图形图像作为自己长期发展技能。

    程渲染管线

    openGL实现了渲染管线,它是一系列数据处理的过程,并将应用程序的数据转换成最终渲染的图像,openGL首先接收几何数据,并且将它输入到一系列的着色器阶段中进行处理,下图就是openGL的渲染管线示意图

    pipline

    下面将会按照渲染管线的流程,对各个过程进行解释

    变换和投影

    渲染过程中前几个阶段都是有关顶点,通过变换,或者旋转这些点,并在他们之前绘制线段,就能在平面的2D屏幕上创造出一个3D世界的错觉,或者通过投影矩阵将用于3D坐标转换成二维的屏幕坐标,实际的线条也将在二维屏幕坐标上进行绘制。如下图所示

    vertix

    光栅化

    实际绘制或填充每个顶点间的像素形成线段就叫做光栅化,如下图所示。

    raster

    着色器

    着色就是沿着表面改变颜色值,下图还是是渲染管线的示意图,这次把焦点放在着色器上,图中绿色表示可编程管线,黄色表示固定管线,蓝色部分表示四个着色阶段。还有另外一个独立的阶段计算着色阶段,在图中没有示意出。

    pipline_shader

    1. 顶点着色阶段:接收并处理顶点缓存对象中给出的顶点数据
    2. 细分着色阶段:在openGL管线内部生成新的几何体
    3. 几何着色阶段:在openGL管线内部生成新的几何图元
    4. 片元着色阶段:处理openGL光栅化之后生成的独立片元
    5. 计算着色阶段

    向openGL着色器传递渲染数据的方法有三种:

    • 属性: 对每个顶点都要做改变的数据元素
    • uniform:对每个顶点都要作改变的数据元素
    • 纹理:任何大型浮点数据块都可以通过这种方式传递给着色器

    下图是着色器的一个例子,通过改变立方体表面的颜色,能狗创建光线照射在一个红色立方体上的效果,是3D效果更加明显

    shader

    纹理贴图

    纹理贴图就是沿着表面贴图,效果如下

    texture



沪ICP备19023445号-2号
友情链接