楼主:
Q2N2222 (Q2N2222)
2016-07-12 00:59:31请问
假设以一个三角形来说
vertex shader 是三角形的三个vertex座标做些变换后再输出
frament shader 是计算三角形中所有farment的color
是这样的解读有错?
我看书上frament shader 会从vertex shader中
传入经过模型矩阵变换过的vertex去计算光照
但这样不就只有用那个顶点的座标去计算?
三角形上其他像素的座标不就没用到?
那frament shader又是怎么取得每个frament的座标的?
fragment你在 fragment shader 里面会拿到已经内插好的座标早期的 GLSL 是用 varying 宣告要内插的变量
楼主:
Q2N2222 (Q2N2222)
2016-07-12 23:50:00了解了 感恩
frag取得的不是顶点座标,而是插值uv座标顶点是给triangle setup单位处理。frag得到资料已是每个pixel所属的uv,法线
楼主:
Q2N2222 (Q2N2222)
2016-07-15 00:07:00uv是指二维? 可是传入的是三维 vec3
而且还会帮你弄 perspective division
贴图UV通常只需要2维。除非反射贴图。vs输出资料不等于frag输入资料。3维顶点不是给frag,是给TriangleSetupSetup完毕传给Frag已非3D顶点座标而是2D萤幕像素,及其着色所需插值资讯
楼主:
Q2N2222 (Q2N2222)
2016-07-18 20:20:00那frag中要怎么用2d座标就算光照?
作者:
riveranb (River)
2016-07-18 21:10:001.all vertices: calculate pos,n,color,uv,...(lit)2a. all fragments on 3 edges to calculate info.2b.rasterize: fragments on scanlines inside 3 edges.3c.each fragment get interpolated pos,n,color,uv,...3.in fragment shader, get your final result(color).
不用 2D 座标算 shading 啊,你复制一份 pos 送内插就好
float2 uv : TEXCOORD0; 用它与tex2d()抓贴图颜色。float3 color: COLOR传送算完Diffuse光照的颜色顶点光照就两个乘起来就搞定。而pixel光照也不需要顶点3D位置。是传法向量与光向量它只要知道两个向量就能算夹角,用角度判断光的强度Frag不需要知道自己处理得pixel位置在哪里。Vert(顶点)->TriangleSetup(顶点转pixel,插值)->Frag(算颜色)
我竟然没发现 shading 不需要 pos 这个盲点 XDD
frag连自己的萤幕2D座标都不必知道啊XD只要知道怎摸算颜色就好。