Opengl es 如何像GL_repeat一样重复纹理贴图?

Opengl es 如何像GL_repeat一样重复纹理贴图?,opengl-es,textures,webgl,three.js,Opengl Es,Textures,Webgl,Three.js,我有一个房子模型在我的游戏中,我有一些材料的房子几何。房子的墙上有一种材料,我有一个纹理贴图图像来显示砖块 var mat = new THREE.MeshPhongMaterial( { ambient: 0x969696, map: THREE.ImageUtils.loadTexture( 'textures/G/G0.jpg' ), overdraw: true,combine: THREE.MultiplyOperation } ); 通过上面的这种方式

我有一个房子模型在我的游戏中,我有一些材料的房子几何。房子的墙上有一种材料,我有一个纹理贴图图像来显示砖块

var mat = new THREE.MeshPhongMaterial( { 
    ambient: 0x969696,
    map: THREE.ImageUtils.loadTexture( 'textures/G/G0.jpg' ), 
    overdraw: true,combine: THREE.MultiplyOperation 
} );
通过上面的这种方式,纹理贴图看起来像
GL\u CLAMP
我希望它像
GL\u REPEAT
一样显示

我该怎么办

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

在那里调用。
loadTexture
默认为
THREE.ClampToEdgeWrapping
(请参阅上一链接中的ctor函数)。不知道是否可以使用
回调
(因为JS中的
这个
有点奇怪(看起来它指向的是创建的
图像
,而不是创建的
纹理
)。签名:

loadTexture: function ( path, mapping, callback ) {
最好只在本地命名纹理并手动设置包裹模式:

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

如果不查看实际代码,使用threejs似乎不会有什么进展…

我在以下网站上发布了一个完整的工作示例:

代码示例的相关部分为:

// 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 );      

图像必须为8x8、16x16、32x32、128x128、256x256、512x512等。 所有这些都在发挥作用。
=)

我试着像那样设置包装和包装,但它不起作用。我想可能是材质错了,现在我用的是MeshPhongMaterial,我应该用ShaderMaterial来代替吗?不知道,我会努力让它工作的。纹理必须是2-1的幂,看。我有一个类似的问题,我缩放了一个立方体,纹理被拉伸了。要防止出现这种情况,需要在
render()
中设置新的立方体大小,如下所示:
texture.repeat.set(2*cWidth,2*cHeight)(然后纹理的行为类似于未缩放的图案)。希望能有帮助。非常感谢!我知道如何在立方体和球体上重复纹理。但我还有一个问题,那就是如何在几何体的材质上重复纹理?我在游戏中有一些加载的模型,模型的几何体有一些材质,每个材质都有不同的纹理图像,所以你能给我一些建议或示例吗?谢谢!我知道了,就是这样!我使用的图像大小是120*120,我把它改成128*128,这样问题就解决了!可能图像的大小必须为128*128或256*256或其他,如果您想看到“重复”是的,为了使重复功能正常工作,图像尺寸必须是2的幂次方。包装要求图像为2的幂次方(POT),但它们不必是正方形。