文档章节

3D流水线[引用]

rise-worlds
 rise-worlds
发布于 2016/06/20 13:34
字数 1443
阅读 1
收藏 0
初步涉及3D,被高手指出对D3D的硬件流水线不熟悉.马上找资料,并做总结.我可不能落后哎.
   先发张流水线的图:
  
 
一. system memory(系统内存)
  3D数据被CPU创建后,在进入流水线之前,会储存在系统内存中.之后,这些待决数据将通过数据总线传入显卡的AGP存储器或显存中.
二.1.vertex data(顶点数据)
   点是最基本的几何图元,一个三角形由三个顶点组成,一个矩形有四个。
   D3D中定义的顶点不只包含位置信息,还可以加入好多其他的要素.举个例子
   typedef struct vertex
 {
   FLOAT x,y,z;
   FLOAT u,v;
   DWORD color;
 }COSTUMVERTEX;
 #define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZ | D3DFVF_DIFFUSE | D3DFVF_TEXT1)
   这段代码就表示所定义的顶点包含位置,漫反射,纹理坐标的信息.这种形式称为FVF(Flexible Vertex Function)可变顶点格式.这些顶点数据会继续送入流水线下一级进行平移,旋转,光照,着色处理.
   2.Surface Data(页面数据)
  这是个啥东西以前还真没搞明白过,一直理解为2D中的surface,在D3D9SDK中,ddraw被去掉了,据说是运用3D流水线进行2D编程将比传统的2D流水线更高效><,今天算是碰到它了,借此机会一蹴而就!
   Andre的书上说,这种surface被称为high-order-surface,不是在CPU里创建的,使用的也不是自己定义的那个顶点格式,而是由一些数学函数直接在显卡里创建的,作用能够使网格模型更加平滑,还提到两个技术术语,一个N-Patches(貌似以前在哪见过...)和
TRUFORM meshes on ATI hardware(从没听说过,从字面上理解应该是ATI显卡特有的技术).完了,貌似有点深奥,时间紧迫,还是先放这儿了.....
三.1.Transform and Lighting(移动和光照)
   这部分作用就是让顶点组成的物体能够在虚拟世界中产生位移产生旋转以及进行光照计算,不然,整个世界不都黑忽忽的,不生动啊,不真实啊,现在人不都讲究个真实和诚信嘛!
   移动是用变换矩阵实现的,让组成物体的每个顶点乘上那个变换矩阵就OKAY了。光照稍微复杂一点,按光源分类有点光源(point light),平行光(directional),探照灯(spot light);按照性质有自发光(emisive),环境光(ambient),镜面反射(specular),漫反射(diffuse).在虚拟的环境中,这些光考虑的越周全,表现出的效果也就越真实,但渲染速度也会变慢的。
  2.Vertex Shader(顶点着色)
   分为flat着色和Gouraud着色,各有利弊吧.说的细点,flat着色是根据组成物体每个面的法线进行着色,做出的效果不平滑,如果对一个球体运用flat的话,效果会是disco舞厅天花板上的那个球装灯的样子.Gouraud着色根据各顶点的法线来计算插植进行着色,得到的效果要平滑的多。
                       
                              flat 
                  
                       Gouraud+specular
    还可以不用微软的API,自己用HLSL做算法,那个就太难了....(HIGH LEVEL SHADING LANGUAGE)   
四.clipping(裁减)
   这部很关键哦,能够有效减少GPU的运算量.在虚拟世界中,我们得到的是角都是有限的,就像在现实世界,人不可能看到身后的东西,除非后面长眼了,还有,太远的物体看不到,比如,美国人看不到本拉登在做什么,所以他们急啊,他们想找到那老头子....,太近了更看不到了,看到了可麻烦了,如果每个人都能看到细菌,那还吃饭吗?所以,在光栅化之前,要把理论上看不到的东西裁减掉,别让GPU运算,那没用啊。
五.1.MutiTexture(多重纹理)
    人靠衣服妆吧,总不能光着身子上大街,那也不好看啊。在虚拟世界里也一样,单单一个网格模型只不过是个骨架子,看上面那两个球就知道,很生硬吧.如果能加上纹理就会有生动的效果了哦。现在的显卡都能支持好多重纹理了,具体多少我也不清楚,十几层吧,你可以做个人物模型,先贴上皮肤,再贴上内衣内裤,再贴上秋衣秋库,再贴上毛衣毛库.....
   2.Pixel Shader(象素着色)
    就是产生象素级别的颜色控制,做的好的话能够使模型展现一流的效果,更加平滑,更加真实.比如柔顺的绣发,光滑富有质感的皮肤.....,API里目前我还不知道有啥,HLSL肯定能做.
 
六 FOG(雾化效果)
   想要朦胧感?雾化一下吧,参考PS上的寂静岭1......那个终年被浓雾笼罩的小镇.
 
七.stencil/depth/alpha test(色深,深度,啊而法测试)
   在将"渲"好的世界投影在屏幕之前还是做下物体遮挡测试,现实中肯定不会有人拥有透视眼吧,能看到墙后面的物体,那可绝了!那穿衣服也没啥用了....
   stencil和depth我还没分太清楚,好象都是进行物体的象素对比.depth可以用z-buffer或w-buffer运算,stencil还不清楚,先放这儿了.alpha是标识物体透明度的,比如,水总是透明的吧,丝绸也有透明的吧.玻璃总透明吧.....
八.frame buffer
   一切的一切都准备好了,送入帧缓冲,准备把美丽的3D世界投影到屏幕上吧^^

本文转载自:http://www.cnblogs.com/flying_bat/archive/2007/03/19/679749.html

rise-worlds

rise-worlds

粉丝 3
博文 1755
码字总数 0
作品 0
深圳
程序员
私信 提问
分享8款精美的jQuery图片播放插件

本文将和大家一起分享8款精美的jQuery图片播放插件,每一款插件均有演示和源码下载,有兴趣的朋友可以下载使用和研究。废话不多说了,直接上这些插件。 1、3D轮播相册 这款3D相册插件利用了H...

wei-spring
2014/04/18
0
0
7 款风格各异的jQuery图片展示效果

在网页中,图片的展示方式多种多样,当然所要达到的目的也各不相同,本文就是要通过jQuery来实现各种不同的图片展示方式,有jQuery焦点图、图片缩放、图片滚动等效果。如果你喜欢这些小效果,...

yykj
2013/11/08
2.6K
1
7 款风格各异的jQuery图片展示效果

在网页中,图片的展示方式多种多样,当然所要达到的目的也各不相同,本文就是要通过jQuery来实现各种不同的图片展示方式,有jQuery焦点图、图片缩放、图片滚动等效果。如果你喜欢这些小效果,...

yykj
2013/10/30
386
3
如何学好游戏3D引擎编程

注:本文是网上看到的一篇文章,感觉写的很好,因此收藏了下来 《如何学好游戏3D引擎编程》 此篇文章献给那些为了游戏编程不怕困难的热血青年,它的神秘要我永远不间断的去挑战自我,超越自我...

loving_forever_
2016/07/28
0
0
[Unity Shader] Shader学习笔记1 - 概述1

GPU发展 GPU英文全称Graphic Processing Unit,中文翻译为“图形处理器”。NVIDIA在1999年发布GeForce 256图形处理芯片时首先提出GPU的概念。GPU所采用的核心技术有硬件T&L、立方纹理(Cube m...

NickHomeSelf
2016/08/07
33
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周六乱弹 —— 如果是个帅小伙你愿意和他出去吗

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 小小编辑推荐:《Ghost 》游戏《死亡搁浅》原声 《Ghost 》游戏(《死亡搁浅》原声) - Au/Ra / Alan Walker 手机党少年们想听歌,请使劲儿戳...

小小编辑
57分钟前
107
5
java通过ServerSocket与Socket实现通信

首先说一下ServerSocket与Socket. 1.ServerSocket ServerSocket是用来监听客户端Socket连接的类,如果没有连接会一直处于等待状态. ServetSocket有三个构造方法: (1) ServerSocket(int port);...

Blueeeeeee
今天
6
0
用 Sphinx 搭建博客时,如何自定义插件?

之前有不少同学看过我的个人博客(http://python-online.cn),也根据我写的教程完成了自己个人站点的搭建。 点此:使用 Python 30分钟 教你快速搭建一个博客 为防有的同学不清楚 Sphinx ,这...

王炳明
昨天
5
0
黑客之道-40本书籍助你快速入门黑客技术免费下载

场景 黑客是一个中文词语,皆源自英文hacker,随着灰鸽子的出现,灰鸽子成为了很多假借黑客名义控制他人电脑的黑客技术,于是出现了“骇客”与"黑客"分家。2012年电影频道节目中心出品的电影...

badaoliumang
昨天
16
0
很遗憾,没有一篇文章能讲清楚线程的生命周期!

(手机横屏看源码更方便) 注:java源码分析部分如无特殊说明均基于 java8 版本。 简介 大家都知道线程是有生命周期,但是彤哥可以认真负责地告诉你网上几乎没有一篇文章讲得是完全正确的。 ...

彤哥读源码
昨天
19
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部