《DirectX编程技术学习指南》.doc
文本预览下载声明
DirectX编程技术学习指南
绪论
在如今的计算机世界,所承载的已经不仅仅是字符,现在两大显卡厂商的每一次吵架都引领着新的图形时代的变迁,计算机图形学已经越来越亲近于我们。
21世纪以后,3D绘图程序设计已经能让程序员轻松调用显卡来进行各种各样的操作,这都归咎于前任留下的强大的图形技术,现在你将看到的是一款微软的魔鬼杰作----DirectX图形库。
简介
DirectX,(Direct eXtension,简称DX)是创建的多媒体编程接口。由C++编程语言实现,遵循COM。被广泛使用于Microsoft Windows、Microsoft Xbox和Microsoft Xbox 360电子游戏开发,并且只能支持这些平台。最新版本,创建在最新的Windows 7上。顶点着色器也可以通过顶点进行光照,着色等等,但是限于网格的三角形面片的限制,着色和光照效果并不好。
(顶点着色器的光照有很严重的网格感,很不真实)
(像素着色器通过像素值计算,可以呈现很棒的光照)
像素着色器,就是来解决这个问题的关键,像素着色器,可以不考虑网格的精细度,通过所占的像素值来计算颜色精度,所以,用像素着色器计算颜色值会非常棒。
GeometryShader(几何着色器)是DX10的最重要的新增功能之一,在绘图流程中被分配到了顶点着色器之后,像素着色器之前,它的功能是用来组合基本的点线面几何图形,没有GeometryShader的年代,几何图形数量和组合方法都通过参数来决定,调用D3D9的DrawPrimitive 和DrawIndexPrimtive时候,所传入的参数就决定了几何图形的种类,数量和排列方法,D3D10可以通过GeometryShader(几何着色器)自行重新排列顶点,甚至改变几何图形的数量。
DX11又新增了两种着色器,准确的来说是三种着色器,分别是:
外壳着色器(Hull Shader),域着色器(Domain Shader)以及(Compute Shader)计算着色器。
但是Hull Shader和Domain Shader是绑定的,所以合作一个,主要用于的是细分镶嵌,这是一种非常强大的网格细分技术,可以把很粗糙的网格变得非常精细。Hull Shader(外壳着色器)用来控制自动生成顶点的数量和算法,也就是Tessellator的细分级别,然后交给Tesselator进行镶嵌处理,最后由Domain Shader(域着色器)按照程序要求生成所需曲面,并自动进行法线平移、置换贴图,产生新的模型。
计算着色器(Compute Shader)是一种类似于CPU中线程的着色器,其主要目的是让GPU完全能够胜任CPU的大部分工作,包括数据存储,线程管理等等,可以让GPU编程更加的清晰。而且有了计算着色器可以让原本需要花费很复杂算法而且也要考虑运行效率的LOD技术,得到大规模的使用(Levels of Detail,意为多细节层次,LOD技术指根据物体模型的节点在显示环境中所处的位置和重要度,决定物体渲染的资源分配,降低非重要物体的面数和细节度,从而获得高效率的渲染运算。)
优势与弱势
1、从技术本身考虑
弱势:DirectX并不是工业标准,也就是他有局限性,他是微软的标准,也就是说,他只能在Windows相关平台上进行开发,比如Windows操作系统,XBox360,WindwosPhone上。他与OpenGL不同,OpenGL是工业标准,也就是说OpenGL只要是在有图形显示的硬件上都支持的图形库。也就是说,从使用的广泛度和兼容性来说,DirectX略差于OpengL
优势:相对于OpenGL的兼容性,DirectX出色的高效性和库整洁性是完全胜于OpenGL的,OpenGL毕竟是一群组织在开发,库的规范还有整洁性都逊于DX,而且,DX的版本更新很快,其最新技术基本已经把OpenGL甩在了后面。
2、从我们学习角度考虑
弱势:DirectX并不是易于上手的技术,因为他要设计很多线性代数,高数等数学知识,如果你从DX9开始学,一开始繁琐的API和绘制条件设置绝对能让一个新手晕头转向,但是如果你从DX10开始学,那么恭喜你,你学的线性代数马上就有用的了,至于够不够用那得看你的理解能力。总体来说,这是一门不好上手的技术。
优势:如果一个人学OpenGL入门,一个人学DX入门,两个人学习能力相似,一般是学OpenGL的人要快一些入门,但是到了后期,学DX的同学会在很多图形渲染方面都略强于学OpenGL的同学,因为到了后期,OpenGL的代码库会越来越乱,DX的还是和以前一样严谨。所以,学到后期,学习DX的同学会更加的顺手。不过两者都有共同的缺点,越到高层资料越少,而且这种技术是不太能有视频教学的。
学习例程
10个人学同一种技术或许也会出现10
显示全部