我假设基于loadTextureCube
您cube
对天空盒使用着色器方法。到目前为止,您的代码一切都很好。您看到的问题是,虽然您的纹理具有偏移属性,但材质(或更具体地说是其中的立方体着色器程序)没有统一将其传递给碎片着色器。这当然是假设你做这样的事情:
例如。立方体着色器材质
var skyboxGeo = new THREE.CubeGeometry( 5000, 5000, 5000 );
var cubeShader = THREE.ShaderUtils.lib[ "cube" ];
cubeShader.uniforms[ "tCube" ].value = cubemap;
var skyboxMat = new THREE.ShaderMaterial( {
fragmentShader: cubeShader.fragmentShader,
vertexShader: cubeShader.vertexShader,
uniforms: cubeShader.uniforms,
side: THREE.BackSide
});
var skybox = new THREE.Mesh( skyboxGeo, skyboxMat );
scene.add( skybox );
可能有很多变通方法,但您总是可以尝试MeshFaceMaterial
在标准立方体上使用类似 a 的方法来获得所需的结果:
例如。标准材料
var skyboxGeo = new THREE.CubeGeometry( 5000, 5000, 5000 );
var materialArray = [];
for (var i = 0; i < 6; i++) {
var cubeTex = THREE.ImageUtils.loadTexture( urls[i] );
cubeTex.offset.x = -.5;
cubeTex.offset.y = -.5;
materialArray.push( new THREE.MeshBasicMaterial({
map: cubeTex,
side: THREE.BackSide
}));
}
var skyboxMat = new THREE.MeshFaceMaterial( materialArray );
var skyBox = new THREE.Mesh( skyboxGeo, skyboxMat );
希望有帮助
~D