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),但它们不必是正方形。