Webgl 球面映射人工制品

Webgl 球面映射人工制品,webgl,texturing,Webgl,Texturing,我对webgl中的球体贴图纹理有一些问题 我的纹理: 现在我对球体进行纹理处理。如果球体在相机前面,一切正常: 球体是一个单位球体(r=1),由经度和纬度定义 但是我得到了一些人工制品,如果我在x方向平移球体-2.5(不旋转相机): 此图像没有mipmapping。下面的图像是带有mipmapping的: 顶点和法线似乎没有问题 顶点着色器: precision highp float; uniform mat4 mvMatrix; // Matrix zum Transformie

我对webgl中的球体贴图纹理有一些问题

我的纹理:

现在我对球体进行纹理处理。如果球体在相机前面,一切正常:

球体是一个单位球体(r=1),由经度和纬度定义

但是我得到了一些人工制品,如果我在x方向平移球体-2.5(不旋转相机):

此图像没有mipmapping。下面的图像是带有mipmapping的:

顶点和法线似乎没有问题

顶点着色器:

precision highp float;

uniform mat4 mvMatrix;  // Matrix zum Transformieren des Verex vom model-space in den view-space
uniform mat4 mvpMatrix; // Matrix zum Transformieren des Vertex vom model-space in den clip-space
uniform mat3 mvNMatrix; // Matrix zum Transformieren der Vertex-Normale vom model-space in den view-space

attribute vec4 mV;  // Vertex im model-space
attribute vec3 mVN; // Vertex-Normale im model-space

varying vec2 vN;

void main(void)
{
   vec3 e = normalize( vec3( mvMatrix * mV ) );
   vec3 n = normalize( mvNMatrix * mVN );

   vec3 r = reflect( e, n );            
   //float d = dot(n, e);
   //vec3 r = e - 2.0 * d * n;

   float m = 2.0 * sqrt( 
      pow( r.x, 2.0 ) + 
      pow( r.y, 2.0 ) + 
      pow( r.z + 1.0, 2.0 ) 
   );
   vN.s = r.x / m + 0.5;
   vN.t = r.y / m + 0.5;

   gl_Position = mvpMatrix * mV;
}
和片段着色器:

precision highp float;

uniform sampler2D uSampler;
varying vec2 vN;

void main(void)
{
   vec3 base = texture2D( uSampler, vN ).rgb;
   gl_FragColor = vec4( base, 1.0 );
}

有人知道我为什么要得到这些文物吗?我正在使用windows和firefox。

您的曲面法线是向后的,或者您通常剔除了错误的一面。您已经做了类似的操作,但是您正在渲染球体的内部而不是外部,因此您看到的角度大于180度,包括前后分离的“桥”。另请参见:,它表明方位角贴图在任何地方都是保角的,但至少排除了具有视线的真实赤道。

曲面法线向后,或者通常剔除了错误的一侧。您已经做了类似的操作,但是您正在渲染球体的内部而不是外部,因此您看到的角度大于180度,包括前后分离的“桥”。另请参见:,它表明方位角贴图在任何地方都是保角的,但至少排除了具有视线的真实赤道。

如果将对象稍微移到一边,会发生什么情况?或者,如果您可以平滑地设置侧对侧运动的动画,则使用-1进行x平移不会有问题。但是我得到了-1.5的人工制品,如果你把物体稍微移到一边会怎么样?或者,如果您可以平滑地设置侧对侧运动的动画,则使用-1进行x平移不会有问题。但我得到的人工制品是-1.5。