4

多くの立方体、球体などを含むシーンを作成し、それらのプリミティブにテクスチャを適用できましたが、単純な三角形にテクスチャを追加したい場合、完全に失われます。

これが私がそれを正しくするのに最も近いものです:

  var texture=THREE.ImageUtils.loadTexture('/f/3d-images/texture-steel.jpg');
  var materialDecalRoof=new THREE.MeshBasicMaterial( {
    'map': texture,
    'wireframe': false,
    'overdraw': true
  } );
var geometry = new THREE.Geometry();
geometry.vertices.push(new THREE.Vector3(tentX/2+1, tentY, tentZ/2+1));
geometry.vertices.push(new THREE.Vector3(0, tentT, 0));
geometry.vertices.push(new THREE.Vector3(0, tentT, 0));
geometry.vertices.push(new THREE.Vector3(-tentX/2-1, tentY, tentZ/2+1));
geometry.faces.push(new THREE.Face4(0, 1, 2, 3));
geometry.faceVertexUvs[0].push([
  new THREE.UV(0, 0),
  new THREE.UV(0, 0),
  new THREE.UV(0, 0),
  new THREE.UV(0, 0)
]);
geometry.computeFaceNormals();
geometry.computeCentroids();
geometry.computeVertexNormals();
var mesh= new THREE.Mesh( geometry, materialDecalRoof);
scene.add(mesh);

これは動作しません。私が得たのは、画像があるはずのちらつきのある三角形(シーンが移動したとき)だけです。

これをテストするには、https://www.poptents.eu/3dFrame.phpに移動し、屋根セクションに画像をアップロードし、ビューをドラッグして屋根のちらつきを確認します。

ここで私が間違っていることを誰かが知っていますか?

4

1 に答える 1

5

UV Mappingについて少し読む必要があります。4 つのコーナーすべてを (0,0) で初期化することはできません。テクスチャの幅と高さのパーセンテージである 0 ~ 1 の数値を指定する必要があります。つまり、頂点が (左上)、(右上)、 (右下)、(左下)...など...

于 2012-09-02T21:36:12.857 に答える