如何用three.js编写正确的重复纹理

Posted

技术标签:

【中文标题】如何用three.js编写正确的重复纹理【英文标题】:How to write right repeat texture with three.js 【发布时间】:2012-12-16 08:19:21 【问题描述】:

我在模型上搜索重复纹理。在所有示例或问题中,我发现只有这样:

var lavaTexture = THREE.ImageUtils.loadTexture( 'images/lava.jpg' );
lavaTexture.wrapS = lavaTexture.wrapT = THREE.RepeatWrapping;
lavaTexture.repeat.set( 3, 3 );
var lavaMaterial = new THREE.MeshBasicMaterial(  map: lavaTexture  );

这个我明白,但是当材料是这样写的时候:

Wood: new THREE.MeshPhongMaterial( 
   color: 0xffffff,
   specular:0xffffff,
   shininess: 10,
   map: new THREE.ImageUtils.loadTexture ( "models/macabann/chataigner.jpg"),
// not sure as right
   WrapS : THREE.RepeatWrapping,
   WrapT : THREE.RepeatWrapping,
   maprepeat : [2,2],

   envMap: textureCube,
   combine: THREE.MixOperation,
   reflectivity: 0.05
 )

如果可能的话,我会搜索如何以这种格式准确地写这个。 感谢您的任何回答。

【问题讨论】:

How to repeat the texture map like GL_REPEAT?的可能重复 【参考方案1】:

您希望纹理在您的模型上重复。为此,请遵循以下模式:

var loader = new THREE.TextureLoader();

var texture = loader.load( 'myTexture.jpg', function ( texture ) 

    texture.wrapS = texture.wrapT = THREE.RepeatWrapping;
    texture.offset.set( 0, 0 );
    texture.repeat.set( 2, 2 );

 );

var material = new THREE.MeshPhongMaterial( 

   color: 0xffffff,
   specular:0x111111,
   shininess: 10,
   map: texture,
   . . .

 );

编辑:更新到 three.js r.84

【讨论】:

您的解决方案很好,但实际上不是很好的程序:材料在网格上拉伸(见 woodark)......我正在看这个它似乎更紧,但这显然不会重复(看到woodlight)你可以在这里看到the result什么是产权... 我对你的问题的回答是正确的。您使用的模型和/或纹理似乎有其他问题。您应该使用“二次幂”纹理。 (例如,尺寸为 512 x 256)另外,请检查以确保模型的 UV 正确。使用参考贴图作为纹理进行练习。 ( google uv_map_reference.jpg ) 请点击复选标记“接受”此答案,如果您有其他问题,请发布新问题。 我发现我的问题出在哪里:纹理太小,身体网格只用一个块......但我不理解three.js中的映射......我问了一个新问题。 .. @LauraneBernard 我明白你在找什么。这是一个很好的例子。 stemkoski.github.io/Three.js/Texture-Repeat.html你可以去看看源代码,看看它是如何工作的。

以上是关于如何用three.js编写正确的重复纹理的主要内容,如果未能解决你的问题,请参考以下文章

修复了 Three.js 中的纹理大小

如何用three.js让粒子发光?

Three.js 运行时纹理/图像更新

three.js 场景.背景纹理中的透明度

为啥我的 .dae 文件在 three.js 中不显示纹理和动画?

【Three.js】请问如何显示带纹理的三维模型?