`
pjg82pjg
  • 浏览: 17575 次
最近访客 更多访客>>
社区版块
存档分类
最新评论

3D渲染流水线

 
阅读更多

3D渲染流水线
2010年12月07日
  下面开始详解3D渲染流水线:
  1、首先要设置好各种转换矩阵(相机矩阵、投影矩阵、模型矩阵,D3D要分别设置这三个,Opengl则把相机矩阵和模型矩阵相乘作为一个结果来设置)。然后准备好顶点以及把顶点组成图元的索引数据。
  2、把顶点和索引(图元信息数据)交给显卡。显卡的顶点处理单元开始工作了,显卡内部依次对每个顶点处理,这里有两种模式,固定管线和Shader模式。
  3、顶点处理器,每个顶点处理的过程是通过世界矩阵和相机矩阵把顶点位置转换到相机空间中,然后再通过投影矩阵转换到裁剪坐标系中,这样以后就可以在裁剪坐标系进行裁剪了。这个顶点处理过程也包括光照和贴图的处理,以分配给每个顶点颜色信息.(注意,光照和贴图是这个步骤开始处理的)。这个阶段可以由用户写的VertexShader代替。
  4、图元装配和裁剪阶段,这个阶段把上面转换好的顶点根据定点索引和图元类型组装,组装结果是一个图元数组(底层统一转为三角形处理)。然后把组装的结果根据相机的可视区域(相机可视区域在透视投影下是一个四棱锥)进行裁剪。视域体之外的图元被抛弃,横跨视域体边缘以及视域体内部的图元保留。
  5、光栅化。对于上一步中剩下的每一个三角形,把它三个顶点从透视空间映射到屏幕空间。然后转换后的顶点在屏幕上依然是一个三角形(有可能退化为一个点或线,但这不影响算法),对于映射到屏幕上的三角形内的每一个像素,根据它在三角形中的位置,通过三角形原来的三个顶点进行插值。插值得到的结果包括纹理坐标、顶点法线等,这些信息会被传入下一个阶段。
  6、片元处理器(OPENGL中的称呼)或称为像素处理器(D3D中的称呼)阶段。这个阶段可以由用户写的PixelShader代替。这个阶段可输入顶点处理器插值后传过来的纹理坐标或像素点法线或者用户自定义输出变量。这个阶段主要输出一个颜色值,包括alpha。也可以输出一个Z值,好像不常用。所以应该知道,在这里像素处理器是可以改变像素深度的。
  7、对上一个阶段输出的片元信息进行各种测试,先进行alpha test, 没通过测试的像素不会进入下一步测试。然后进行stencil test(根据stencil buffer上的值)和z-test(根据这个像素的Z值和z-buffer上的值进行比较),根据测试结果会对stencil buffer进行一些修改。
  8、对上一个阶段的剩下的传过来的像素,更新它在Z-Buffer中的Z值,然后开始与帧缓冲区中已存在的该位置的像素根据混合方式进行混合(Alpha Blend)。混合以后的像素就被"画"到屏幕上了。 
  
  流程大体这样。有表达错误的请帮忙指正。
  其中有一些要注意的,stencil test 和 alpha test 什么区别呢?alpha test的测试数值来源是对象纹理所生成的alpha值,大多是直接从贴图中获得。stencil测试熟知的来源是画面上所存储的stencil值。stencil test 一般配合 alpha test使用。给alpha设置一个参考值,来更新画面,将通过alpha测试的像素的stencil值设置为某个值。下面的步骤中再使用这个stencil值。 注意光照和贴图使用的时机。其实光照和贴图第一次实在顶点处理器中使用的,但后面图元中的插值出来的像素依然是需要插值出来的贴图坐标的(光照不一定,固定管道光照根据光照模型来设置图元中其他像素的光照颜色),在像素中计算光照属于per-pixel-lighting。
分享到:
评论

相关推荐

    论文研究-3D图形流水线像素处理后期的设计和实现.pdf

    针对3D图形流水线像素处理后期的实时大批量数据处理和存储器读写要求,以及嵌入式系统资源和功耗的特殊性,给出一种像素处理后期的硬件设计方案。设计首先实现所有测试功能,确保各种效果,其次采用了基于屏幕分割...

    论文研究-图形处理器流水线数据压缩技术研究综述.pdf

    在3D图形渲染流水线的多个阶段,使用数据压缩技术能够显著减少GPU片外存储器的访问量,从而达到提高图形绘制性能和降低功耗的效果。为了对图形处理器流水线数据压缩技术的应用现状进行总结和分析,立足于GPU图形渲染...

    D3D 9 固定功能渲染流水线 演示实例

    简单的,D3D 9 固定功能渲染流水线 演示实例,有一个基本的摄像机类,可以选取场景中的模型。

    Direct3D 技术内幕(完整版)

    《Direct3D技术内幕》所涉及的主题包括:DirectX 7基础,通过Direct3D和 T&L流水线的转换和照明,渲染对象图元,使用DirectInput与用户交互交控制力 反馈设备,纹理处理、雾化、alpha混合以及其他3D基本概念,高级...

    论文研究-基于GPU实现SlideShow中的effect和transition.pdf

    利用Direct3D中的固定功能流水线能实现多种transition和一些简单的effect,如扫描、渐隐渐现及图像旋转等。借助Direct3D中的可编程流水线功能则可实现多种effect,如浮雕、马赛克等。论述了使用高级渲染语言实现多种...

    精通DirectX.3D图形与动画程序设计.pdf

    第三部分介绍了direct3d gpu编程(即可编程流水线),包括hlsl渲染语言、hlsl顶点渲染、hlsl像素渲染、effect及其高级应用、asm顶点渲染、asm像素渲染。第四部分介绍了三维图形程序设计领域目前流行的许多实用技术,...

    精通DirectX.3D图形与动画程序设计.part4

    第三部分介绍了Direct3D GPU编程(即可编程流水线),包括HLSL渲染语言、HLSL顶点渲染、HLSL像素渲染、Effect及其高级应用、ASM顶点渲染、ASM像素渲染。第四部分介绍了三维图形程序设计领域目前流行的许多实用技术,...

    OpenGL编程指南(原书第8版)

    第10章介绍在OpenGL渲染流水线中使用着色器进行几何体图元修改的特别技术;第11章介绍使用OpenGL帧缓存和缓存内存实现高级渲染技术和非图形学应用的相关方法;第12章介绍了最新的着色器阶段,将通用计算的方法融合到...

    自DirectX 3D游戏应用程序的几何模型导出重建‘英文版’

    该文章不仅显示了DirectX 9图形管道中拦截流的基本机制如何导致图形应用程序的非侵入性扩展机制,而且还显示如何适当地操纵流水线和状态来重建几何信息和导出模型 不同风格 在描述我们的系统如何有效地重建图形库...

    基于GPU实现SlideShow中的effect和transition* (2008年)

    利用Direct3D中的固定功能流水线能实现多种transition和一些简单的effect,如扫描、渐隐渐现及图像旋转等。借助Direct3D中的可编程流水线功能则可实现多种effect,如浮雕、马赛克等。论述了使用高级渲染语言实现多种...

    3D游戏编程入门(C#)

    第 20 章 可编程流水线 .... 306 20.1 定义可编程流水线 ...... 306 20.2 使用 HLSL ... 307 20.3 编写 Vertex Shader .. 309 20.4 使用着色增加逼真度 ...... 314 20.5 添加 Pixel shader .. 315 20.6 小结 ...... ...

    一种基于负载均衡的3D引擎任务调度策略

    在此基础上提出了一种基于染色器预先分配的避免图形绘制流水线死锁策略和一种基于队列统计的资源分配及负载均衡策略;最后,基于各类复杂渲染场景的仿真结果证明,论文提出的调度策略可有效地降低染色器资源的空闲时...

    matlab分时代码-brain_viz:用于基于局部电极位置生成3D脑部图像的管道

    该存储库包含用于生成对RAM对象的大脑进行3D渲染所需的所有基础文件的管道代码。 该代码高度依赖RHINO,因此,如果不进行大量修改和工作,在CML之外不太可能有用。 历史简介 用于管道框架的管道的1.0版。 可以从CML ...

    食人魔:面向场景的灵活3D引擎

    概要OGRE (面向对象的... 有关快速概述,请参见下文集成凹凸贴图整合阴影 硬件和软件骨骼动画多层地形 自动Rendertarget流水线(合成器) 使用CSG和Triplanar纹理绘制体绘制 粒子效果谁在使用它? 开源的封闭源 贡献

Global site tag (gtag.js) - Google Analytics