3

我正在尝试使用 Three.js 创建一个简单的 Skybox,但遇到了我应用于立方体的纹理的问题,该纹理只能在外部工作,而不是在立方体内部显示。

这是我的天空盒代码:

var path = assetPath + skyboxPrefix;
var urls = [ path + 'alpine_front.jpg',
             path + 'alpine_back.jpg',
             path + 'alpine_left.jpg',
             path + 'alpine_right.jpg',
             path + 'alpine_top.jpg' ];

var cubeTexture = THREE.ImageUtils.loadTextureCube( urls );

var shader = THREE.ShaderUtils.lib["cube"];
shader.uniforms["tCube"].texture = cubeTexture;

var skyboxMaterial = new THREE.ShaderMaterial( {
    uniforms        : shader.uniforms,
    fragmentShader  : shader.fragmentShader,
    vertexShader    : shader.vertexShader,
    depthWrite      : false
} );

var skyboxGeom = new THREE.CubeGeometry( 10000, 10000, 10000 );

skybox = new THREE.Mesh( skyboxGeom, skyboxMaterial );
skybox.flipSided = true;
    
scene.add(skybox);

这是一个现场版本http://projects.harrynorthover.com/landscape/src/

4

2 回答 2

5

object.flipSided从 r50 开始就消失了。它被替换为object.material = THREE.BackSide. 检查使用相同功能的更新示例以及此迁移页面在这种情况下应该很方便。

于 2012-10-01T11:07:13.513 回答
1

我还在其他示例中看到了“flipSided”开关,但没有让它工作(可能已经过时)。对我有用(带球体)的是设置负比例:

skybox.scale.x = -1;
于 2012-10-01T09:11:20.760 回答