まず、javascript ライブラリ "three.js" を使用して開発しようとしていることを他の人に指摘する必要があります。ドキュメントはここにあります: http://mrdoob.github.com/three.js/docs
問題の核心は、ジオメトリ オブジェクトに格納された UV 座標に基づいて、テクスチャがメッシュ オブジェクトにマップされることです。THREE.CubeGeometry
オブジェクトのUV 座標は配列に格納されていfaceVertexUvs
ます。
6 つの面のそれぞれにある 4 つの頂点の UV 座標の次の配列が含まれています。
{{0,1}, {0,0}, {1,0}, {1,1}}, // Right Face (Top of texture Points "Up")
{{0,1}, {0,0}, {1,0}, {1,1}}, // Left Face (Top of texture Points "Up")
{{0,1}, {0,0}, {1,0}, {1,1}}, // Top Face (Top of texture Points "Backward")
{{0,1}, {0,0}, {1,0}, {1,1}}, // Bottom Face (Top of texture Points "Forward")
{{0,1}, {0,0}, {1,0}, {1,1}}, // Front Face (Top of texture Points "Up")
{{0,1}, {0,0}, {1,0}, {1,1}} // Back Face (Top of texture Points "Up") **Culprit**
立方体を構成する各面に UV 座標をマッピングしています。
{0, 2, 3, 1}, // Right Face (Counter-Clockwise Order Starting RTF)
{4, 6, 7, 5}, // Left Face (Counter-Clockwise Order Starting LTB)
{4, 5, 0, 1}, // Top Face (Counter-Clockwise Order Starting LTB)
{7, 6, 3, 2}, // Bottom Face (Counter-Clockwise Order Starting LBF)
{5, 7, 2, 0}, // Front Face (Counter-Clockwise Order Starting LTF)
{1, 3, 6, 4} // Back Face (Counter-Clockwise Order Starting RTB)
上記の数値は、頂点の配列へのインデックスであり、THREE.CubeGeometry
に格納されておりvertices
、そのうちの 8 つがあります。
{20, 20, 20}, // Right-Top-Front Vertex
{20, 20, -20}, // Right-Top-Back Vertex
{20, -20, 20}, // Right-Bottom-Front Vertex
{20, -20, -20}, // Right-Bottom-Back Vertex
{-20, 20, -20}, // Left-Top-Back Vertex
{-20, 20, 20}, // Left-Top-Front Vertex
{-20, -20, -20}, // Left-Bottom-Back Vertex
{-20, -20, 20} // Left-Bottom-Front Vertex
注: 上記のすべての相対方向は、カメラが正の z 軸に沿って配置され、原点を中心とする立方体を向いていることを前提としています。
したがって、本当の原因は、テクスチャの頂点が上にある背面です。この場合、テクスチャの上部が背面で下向きになるようにします。そのため、立方体が回転のために上下逆さまになり、そのままの状態で表示された場合、イメージは期待どおりに表示されます。次のように変更する必要があります。
{{1,0}, {1,1}, {0,1}, {0,0}} // FIXED: Back Face (Top of texture Points "Down")
この変更は、座標を変更して目的の表示を取得するコードで行うことができます。
var cubeGeometry = new THREE.CubeGeometry(40, 40, 40);
cubeGeometry.faceVertexUvs[0][5] = [new THREE.UV(1, 0), new THREE.UV(1, 1), new THREE.UV(0, 1), new THREE.UV(0, 0)];
var cube = new THREE.Mesh(cubeGeometry, img2);
さらに読むには、UV 座標を使用したテクスチャ マッピングに関する次のリンクをお勧めしますhttp://www.rozengain.com/blog/2007/08/26/uv-coordinate-basics/。