來自今天openGpu上的一個
帖子,以前自己對這塊也是一知半解,導致了曾經(jīng)在一次面試中在這個問題上卡殼(反正最后是沒過。。哭。。。),這次看到正好最近看shaderX1里有介紹,所以就一鼓作氣理解下吧!!

這是shaderX1里從vertex到pixelshader之前的pipeline
我具體解釋下從vertex shader到pixel shader中間的部分:
face culling:根據(jù)triangle的兩邊向量叉乘得到的面法線方向來確定是順時針還是逆時針,從而達到裁剪。
user clip planes:除了使用投影矩陣定義出的6個clipplane之外我們也可以額外自己定義對應的clipplane來剪裁。
frustum culling:視錐裁剪,不說了
homogeneous divide:這就是你說的除以什么w的地方,變換后的定點的xyz均會除以起w,以opengl的列為主(沒記錯的話。。反正就是matrix X vector的那個。。)透視投影矩陣的最后一行為0 0 1 0, 所以w值就是未經(jīng)變換前的z值,所以根據(jù)透視投影的特性使得:-1=<x/w<=1, -1=<y/w<=1, -1=<z/w<=1。但是為何我們要這么做捏。。答案是我沒看懂。。。我覺得純粹是為了下一步。。下面說
viewport mapping:上一步后x,y,z現(xiàn)在已經(jīng)是-1到1之間,上一步的齊次坐標系又被稱為normalized device coordinates(NDC),那么我們要將這些頂點映射到屏幕空間就很簡單了,x = NDC(x) * width + width / 2, y = NDC(y) * height + height/2。
呼。。如果有錯的話還請指正哈!~~