【问题标题】:Texture in Three.jsThree.js 中的纹理
【发布时间】:2017-04-26 05:35:23
【问题描述】:

我正在尝试将纹理应用于三个.js 中的birds example。

  // instantiate a loader
  var loader = new THREE.TextureLoader();

  // load a resource
  loader.load('imgs/birdtexture.jpg',	function (texture) {
     var material = new THREE.MeshBasicMaterial( {
     map: texture,
     side: THREE.DoubleSide
  });

  var bird = new THREE.Mesh( new Bird(), material);
);

由于某种原因,这不起作用,我没有收到任何错误。看来我错过了一些东西。我做错了什么?

编辑: 我按照here 的描述使用 UV 使其工作。代码如下:

  var texture = new THREE.TextureLoader().load("imgs/birdtexture.jpg");
  texture.wrapS = THREE.RepeatWrapping;
  texture.wrapT = THREE.RepeatWrapping;
  texture.repeat.set( 0.05, 0.05);

  var geometry = new Bird();

  function assignUVs(geometry) {

  geometry.faceVertexUvs[0] = [];

  geometry.faces.forEach(function(face) {

    var components = ['x', 'y', 'z'].sort(function(a, b) {
        return Math.abs(face.normal[a]) > Math.abs(face.normal[b]);
    });

    var v1 = geometry.vertices[face.a];
    var v2 = geometry.vertices[face.b];
    var v3 = geometry.vertices[face.c];

    geometry.faceVertexUvs[0].push([
        new THREE.Vector2(v1[components[0]], v1[components[1]]),
        new THREE.Vector2(v2[components[0]], v2[components[1]]),
        new THREE.Vector2(v3[components[0]], v3[components[1]])
    ]);

    });

    geometry.uvsNeedUpdate = true;
    }

    assignUVs(geometry);

    var bird = new THREE.Mesh( geometry, new THREE.MeshBasicMaterial(     {map:texture, side: THREE.DoubleSide }));

【问题讨论】:

  • 你检查imgs/birdtexture.jpg是否是正确的路径?
  • 是的。我将纹理与var geoBox = new THREE.BoxGeometry( 10, 10, 10 ); 一起使用,它起作用了。我认为这与紫外线有关,但我不太确定如何处理它
  • 在加载回调之外创建材质,然后在回调中应用纹理。

标签: javascript image three.js textures


【解决方案1】:

试试这个(未经测试):

  // instantiate a loader
  var loader = new THREE.TextureLoader();
  // Create material
  var material = new THREE.MeshBasicMaterial({side: THREE.DoubleSide});

  // load a resource
  loader.load('imgs/birdtexture.jpg',   function (texture) {
     marterial.map = texture;
  });

  var bird = new THREE.Mesh( new Bird(), material);
);

【讨论】:

  • 谢谢。但它没有用。虽然如果我把鸟改成var bird = new THREE.BoxGeometry( 10, 10, 10 ); 就可以了。
  • 很难知道问题然后没有看到Bird函数。
  • 哦,我知道你已经修好了。就个人而言,我会将所有 assignUVs 函数放在 Bird 类中,并从构造函数中调用它。只是为了保持清洁,也许还有网格生成,以便new Bird() 返回一个准备就绪的网格。
猜你喜欢
  • 1970-01-01
  • 2012-09-17
  • 2017-10-05
  • 2021-01-29
  • 2013-08-28
  • 2013-02-26
  • 2013-07-04
  • 2013-05-19
  • 2016-02-27
相关资源
最近更新 更多