因此,我正在尝试创建一个像SkySphere这样的东西-一个倒置的球体,位于无限远处,其纹理平滑地映射到其上。
但是,我在调低球面坐标映射时遇到了一些麻烦。我尝试了各种映射,包括纬度/经度映射,但是当我围绕场景旋转时(它们围绕图像旋转而不是正确映射到球体),它们似乎总是会产生这种渐近行为。我不确定自己在做什么错。
#version 120
uniform sampler2D iChannel0;
uniform vec3 direction;
#define PI 3.141592653
#define TWOPI (2*PI)
void main()
{
vec3 offset = vec3(gl_TexCoord[0].xy-0.5,0)*2;
vec3 d = normalize(direction + offset);
vec2 tx = vec2(0.5 + atan(d.z, sqrt(d.x*d.x + d.y*d.y))/TWOPI, 0.5 + atan(d.y, d.x)/TWOPI);
vec4 c = texture2D( iChannel0, tx);
gl_FragColor = c*gl_Color;
}
这是我目前的着色器,并且正在产生这种极其奇怪的行为。
为澄清起见,我不是在实际的球体上渲染它,而是在一个简单的四边形上进行渲染,我打算将其投影到一个类似球形的图像上。我采用这种方法的原因有很多,而不仅仅是使用实际的倒置球体。
有人可以帮助我弄清楚为什么我的着色器表现得如此奇怪吗?
答案 0 :(得分:0)
好的。我做的很蠢。问题是我的offset
值是在摄影机空间中计算的,但在世界空间中应用了。在应用之前,我只需要将x和y值乘以相机的左右向量,就可以完美工作。