ThreeJS在没有RepeatWrapping的ExtrudeGeometry的部分侧壁上应用纹理

时间:2016-06-24 07:53:16

标签: javascript three.js

我想在挤压几何体的表面上使用纹理。实际上,我会将图像放在挤压几何体的墙面的一个表面上。

更确切地说,这个几何形状是右圆柱的1/8,顶面是圆形段,侧面是两个矩形的复合体和1/8圆柱形曲面形状的外表面。

现在,我遇到了两个问题:

1)纹理将应用于几何体的所有表面,如何仅在曲面形状表面上应用纹理。

2)因为我将使用画布上的图像在其上绘制图像,然后将其用作此网格的纹理,我不希望图像重复,也许只是有点拉伸就好了。当然,我需要确保图像大小与曲面形状的大小非常相似。

    // geometry
  var settings = {
      amount: 12,
      steps : 1,
      bevelEnabled: false,
      curveSegments: 24
  };

  var shape = new THREE.Shape();
  shape.moveTo( 0, 0 );
  shape.absarc( 0, 0, 5, 0, Math.PI / 4, false );
  shape.moveTo( 0, 0 );

  var geometry = new THREE.ExtrudeGeometry( shape, settings );
var texture = new THREE.Texture(canvas);
//texture.wrapS = texture.wrapT = THREE.RepeatWrapping; // CHANGED
    texture.needsUpdate = true;
var material = new THREE.MeshBasicMaterial({
  color: 0x5588ff,
  map: texture
    });
mesh = THREE.SceneUtils.createMultiMaterialObject(geometry, [material,new THREE.MeshBasicMaterial({
  color: 0x000000,
  wireframe: true,
  transparent: true
    })]);
scene.add( mesh );

demo link

从演示链接中,您可以看到纹理已应用于所有曲面,实际上我只希望将该纹理应用于圆柱的1/8曲面上。

任何意见都将受到赞赏。

由于

0 个答案:

没有答案