gpt4 book ai didi

javascript - Three.js 天空盒渲染为红色立方体然后消失?

转载 作者:行者123 更新时间:2023-12-03 02:48:24 25 4
gpt4 key购买 nike

我正在使用 Three.js 并尝试使用我自己的着色器放入天空盒。我似乎无法自己找到问题,也没有收到任何控制台警告或错误。

我将天空盒缩小,看看它是否正在加载,当页面加载时,它会闪烁红色然后消失,如果我放大天空盒,它就只是白色。

我的js:

// Cubemap
var deception_pass = new THREE.CubeTextureLoader()
.setPath( 'img/deception_pass/' )
.load( [
'deception_pass_ft.png', 'deception_pass_bk.png',
'deception_pass_up.png', 'deception_pass_dn.png',
'deception_pass_rt.png', 'deception_pass_lf.png'
] );

var cubemap = { type: 't', value: deception_pass }

// Skybox
var skyboxUniforms = {
cubemap : cubemap,
};

var skyboxMaterial = new THREE.ShaderMaterial({
uniforms: skyboxUniforms,
});

var loader = new THREE.FileLoader();
loader.load('glsl/skybox.vs.glsl', function(shader) {
skyboxMaterial.vertexShader = shader
});
loader.load('glsl/skybox.fs.glsl', function(shader) {
skyboxMaterial.fragmentShader = shader
});

var skyboxGeometry = new THREE.BoxGeometry(10, 10, 10);
var skybox = new THREE.Mesh(skyboxGeometry, skyboxMaterial);
scene.add(skybox)

顶点着色器:

uniform samplerCube cubemap;
varying vec3 worldPos;

void main() {

worldPos = vec3(modelMatrix * vec4(position, 1.0));

// Move position with camera
gl_Position = projectionMatrix * viewMatrix * vec4(position + cameraPosition, 1.0);
}

片段着色器:

uniform samplerCube cubemap;
varying vec3 worldPos;

void main() {

vec4 color = textureCube(cubemap, worldPos);

gl_FragColor = color;
}

最佳答案

更新:发现我的错误 - 我缺少天空盒的 Material 属性。下面修复了它

var skyboxMaterial = new THREE.ShaderMaterial({
uniforms: {
skybox: { type: "t", value: cubemap },
},
side: THREE.DoubleSide
})

关于javascript - Three.js 天空盒渲染为红色立方体然后消失?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48001088/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com