我是OpenGL的新手。我希望我的背景看起来好像玩家在下面的球体内。当玩家向下看时为白色,在玩家向下看时呈黑色,沿途呈现渐变。
我尝试将相机封装在菱形棱镜中,并将白色分配到顶部顶点,灰色到中间,黑色到底部。但三角形的接缝非常明显,我不完全理解为什么。使更多顶点更好地逼近球体似乎有点过分。我觉得我应该能够在片段着色器中完成所有这些,但是不知道实现它。我可以将相机的y方向[-1,1]作为制服传递给着色器。
我该如何实现?
答案 0 :(得分:1)
解决方案A:添加更多三角形。这样他们就不那么明显了。现代GPU可以在您的情况下轻松渲染3或3000个三角形。
解决方案B:在你的"菱形棱镜上涂上带渐变的纹理"
解决方案C:编写自定义片段着色器,根据垂直位置分配像素颜色
答案 1 :(得分:0)
为什么不使用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);
p.y