9

我的游戏中有一个房屋模型,并且我有一些房屋几何形状的材料。房子的墙壁有一种材料,我有一个纹理贴图图像来显示砖块。

var mat = new THREE.MeshPhongMaterial( { 
    ambient: 0x969696,
    map: THREE.ImageUtils.loadTexture( 'textures/G/G0.jpg' ), 
    overdraw: true,combine: THREE.MultiplyOperation 
} );

通过上面的这种方式,纹理贴图看起来就像GL_CLAMP我希望它显示的那样GL_REPEAT

我应该怎么办?

如果您看不到图像,请检查

4

3 回答 3

13

我在以下位置发布了一个完整的工作示例: http ://stemkoski.github.com/Three.js/Texture-Repeat.html

代码示例的相关部分是:

// for example, texture repeated twice in each direction
var lavaTexture = THREE.ImageUtils.loadTexture( 'images/lava.jpg' );
lavaTexture.wrapS = lavaTexture.wrapT = THREE.RepeatWrapping;
lavaTexture.repeat.set( 2, 2 );
var lavaMaterial = new THREE.MeshBasicMaterial( { map: lavaTexture } );
var lavaBall = new THREE.Mesh( THREE.GeometryUtils.clone(sphereGeom), lavaMaterial );
scene.add( lavaBall );      
于 2012-07-04T12:16:35.883 回答
4

它在那里被调用THREE.RepeatWrappingloadTexture默认为(参见上一个链接中的THREE.ClampToEdgeWrappingctor 函数)。不知道能不能用callback(因为this在JS里有点怪(好像是指向 created Image,而不是 created Texture))。签名:

loadTexture: function ( path, mapping, callback ) {

最好只在本地命名纹理并手动设置环绕模式:

var t = THREE.ImageUtils.loadTexture( 'textures/G/G0.jpg' );
t.wrapS = t.wrapT = THREE.RepeatWrapping;

如果不查看实际代码,看起来您对threejs 的了解并不远...

于 2012-07-03T06:48:47.037 回答
3

图像必须为 8x8、16x16、32x32、128x128、256x256、512x512 等,并且都可以正常工作。=)

于 2014-11-24T12:02:14.317 回答