月下的博客

  C++博客 :: 首页 :: 联系 :: 聚合  :: 管理
  34 Posts :: 0 Stories :: 59 Comments :: 0 Trackbacks

常用链接

留言簿(5)

我参与的团队

搜索

  •  

最新评论

阅读排行榜

评论排行榜

   来自今天openGpu上的一个帖子,以前自己对这块也是一知半解,导致了曾经在一次面试中在这个问题上卡壳(反正最后是没过。。哭。。。),这次看到正好最近看shaderX1里有介绍,所以就一鼓作气理解下吧!!

这是shaderX1里从vertex到pixelshader之前的pipeline

我具体解释下从vertex shader到pixel shader中间的部分:
face culling:根据triangle的两边向量叉乘得到的面法线方向来确定是顺时针还是逆时针,从而达到裁剪。
user clip planes:除了使用投影矩阵定义出的6个clipplane之外我们也可以额外自己定义对应的clipplane来剪裁。
frustum culling:视锥裁剪,不说了
homogeneous divide:这就是你说的除以什么w的地方,变换后的定点的xyz均会除以起w,以opengl的列为主(没记错的话。。反正就是matrix X vector的那个。。)透视投影矩阵的最后一行为0 0 1 0, 所以w值就是未经变换前的z值,所以根据透视投影的特性使得:-1=<x/w<=1, -1=<y/w<=1, -1=<z/w<=1。但是为何我们要这么做捏。。答案是我没看懂。。。我觉得纯粹是为了下一步。。下面说
viewport mapping:上一步后x,y,z现在已经是-1到1之间,上一步的齐次坐标系又被称为normalized device coordinates(NDC),那么我们要将这些顶点映射到屏幕空间就很简单了,x = NDC(x) * width + width / 2, y = NDC(y) * height + height/2。

呼。。如果有错的话还请指正哈!~~
posted on 2011-05-08 19:46 月下圆舞曲 阅读(2057) 评论(0)  编辑 收藏 引用 所属分类: 开发

只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理