球形测绘人工制品

时间:2016-04-02 14:42:07

标签: webgl texturing

我在webgl中遇到了球体贴图纹理的问题。

我的纹理:

enter image description here

现在我对一个球体进行纹理化。如果球体位于相机前面,一切都还可以: enter image description here

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

但是如果我在x方向上转换球体-2.5(不旋转相机),我会得到一些假象: enter image description here

此图片没有mipmapping。以下图片是mipmapping:

enter image description here

顶点和法线似乎没问题。

顶点着色器:

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。

1 个答案:

答案 0 :(得分:0)

你的表面法线是向后的,或者你正在剔除错误的一面。你已经完成了azimuthal projection这样的事情,但是你渲染的是球体内部而不是外部,所以你看到的角度大于180度,包括前后分离的“桥”。另请参阅:map projections,它表明方位角映射在任何地方都是保形的,但至少排除了具有视线的真正的赤道。