在 three.js 中使用纹理图集时,立方体的水平面之间有接缝。
这是演示: http: //jsfiddle.net/rnix/gtxcj3qh/7/或http://jsfiddle.net/gtxcj3qh/8/(来自评论)
var materials = [];
var t = [];
var imgData = document.getElementById("texture_atlas").src;
for ( var i = 0; i < 6; i ++ ) {
t[i] = THREE.ImageUtils.loadTexture( imgData ); //2048x256
t[i].repeat.x = 1 / 8;
t[i].offset.x = i / 8;
//t[i].magFilter = THREE.NearestFilter;
t[i].minFilter = THREE.NearestFilter;
t[i].generateMipmaps = false;
materials.push( new THREE.MeshBasicMaterial( { map: t[i], overdraw: 0.5 } ) );
}
var skyBox = new THREE.Mesh( new THREE.CubeGeometry( 1024, 1024, 1024), new THREE.MeshFaceMaterial(materials) );
skyBox.applyMatrix( new THREE.Matrix4().makeScale( 1, 1, -1 ) );
scene.add( skyBox );
该图集的大小为 2048x256(2 的幂)。我也尝试过手动 UV 映射而不是重复,但结果是一样的。我使用 8 块而不是 6 块,因为我认为 1/6 分割的精度会导致问题,但不是。
这条线上的像素来自地图集中的下一个图块。我尝试了完全白色的地图集,没有任何人工制品。这就解释了为什么 Z 面的垂直边界上没有接缝。我玩过过滤器、wrapT、wrapS 和 mipmap,但它没有帮助。提高分辨率无济于事。有8192x1024图集http://s.getid.org/jsfiddle/atlas.png 我又试了一个图集,结果是一样的。
我知道我可以将地图集拆分为单独的文件,并且效果很好,但不方便。
怎么了?