[英]How can I make this spherical gradient in an OpenGL fragment shader?
我是OpenGL新手。 我希望我的背景看起來像玩家在下面的球體內。 玩家向上看時為白色,玩家向下看時為黑色,並沿此方向漸變。
我嘗試將相機封裝在菱形棱鏡中,並將白色分配給頂部頂點,將灰色分配給中間頂點,將黑色分配給底部。 但是三角形的接縫非常明顯,我不完全理解為什么。 制作更多的頂點以更好地近似一個球體似乎有些矯kill過正。 我覺得我應該能夠在片段着色器中完成所有這些工作,但是對實現它的了解還不夠。 我可以將相機的y方向[-1,1]統一傳遞給着色器。
我該如何實施?
解決方案A:添加更多三角形。 這樣,它們將不那么引人注目。 現代GPU可以輕松渲染3或3000個三角形。
解決方案B:將漸變色紋理應用於“菱形棱鏡”
解決方案C:編寫一個自定義片段着色器,它將根據垂直位置分配像素顏色
為什么不使用y坐標作為顏色強度而不是紋理...
(0,0,0)
為玩家位置(球的中心) r
為球體的半徑 因此,在“片段着色器”中計算顏色如下:
float i=0.5f+(0.5f*y/r); if (i>1.0f) i=1.0f; // white for out of sphere fragments if (i<0.0f) i=1.0f; // here you could have 0.0 if triangles are outer not inner vec3 col; col=vec3(i,i,i);
不要忘記,tis僅在玩家坐標系中起作用
現在如何擺脫三角剖分偽像?
vec3 p
為玩家坐標系中渲染的片段位置 (0,0,0)
的距離應為r
p
標准化 p.xyz*=r/length(p);
py
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.