完全に通常のテクスチャを球にマッピングしようとしています。
テクスチャをラップされたものに変更できないので、マッピング関数を見つける必要があります。
これは私の頂点シェーダーコードです:
vec3 north = vec3(0.0, 0.0, 1.0);
vec3 equator = vec3(0.0, 1.0, 0.0);
vec3 northEquatorCross = cross(equator, north);
vec3 vertexRay = normalize(gl_Vertex.xyz);
float phi = acos(vertexRay.z);
float tv = (phi / (PI*tiling));
float tu = 0.0;
if (vertexRay.z == 1.0 || vertexRay.z == -1.0) {
tu = 0.5;
} else {
float ang_hor = acos(max(min(vertexRay.y / sin(phi), 1.0), -1.0));
float temp = ang_hor / ((2.0*tiling) * PI);
tu = (vertexRay.x >= 0.0) ? temp : 1.0 - temp;
}
texPosition = vec2(tu, tv);
ここから直接:http: //blogs.msdn.com/coding4fun/archive/2006/10/31/912562.aspx
これは私のフラグメントシェーダーです:
color = texture2D(debugTex, texPosition);
このスクリーンショットでわかるように:http://img189.imageshack.us/img189/4695/sphereproblem.png、それは球の亀裂を示しています...そしてこれは私が修正しようとしているものです。(使用されるテクスチャ:http://img197.imageshack.us/img197/56/debug.jpg)
XNA Webサイトの最初のコメントは、次を使用して問題を実際に修正します。device.RenderState.Wrap0 = WrapCoordinates.Zero;
しかし、私はXNAの内部について十分に理解していないため、この特定の問題でこれが何を解決するのか理解できません。
Web全体で、同じことを経験し、補間エラーに関する報告がありますが、これをフラグメントシェーダー(ピクセル/フラグメントごと)として直接実装しているため、この問題は発生しないはずです(補間がないテクスチャuv)。
これに関する情報/解決策はありますか?