Three.js r131升级r132后着色器光照函数无匹配重载报错
Three.js r131升级r132片元着色器光照函数报错解决方案
问题原因
Three.js r132版本对内置着色器的光照工具函数做了不兼容更新,getDirectionalDirectLightIrradiance、getPointDirectLightIrradiance 两个函数的参数列表移除了geometry参数,你自定义着色器里仍然使用旧版3参数调用方式,因此找不到匹配的重载函数。
修复方法
把代码中调用这两个函数的行去掉geometry参数即可:
- 原调用语句
getDirectionalDirectLightIrradiance(directionalLight, geometry, directLight);修改为getDirectionalDirectLightIrradiance(directionalLight, directLight); - 原调用语句
getPointDirectLightIrradiance(pointLight, geometry, directLight);修改为getPointDirectLightIrradiance(pointLight, directLight);
修改完成的完整代码如下:
IncidentLight directLight; // Directional Light #if NUM_DIR_LIGHTS > 0 DirectionalLight directionalLight; for (int i = 0; i < NUM_DIR_LIGHTS; i++) { directionalLight = directionalLights[i]; // 移除geometry参数 getDirectionalDirectLightIrradiance(directionalLight, directLight); #ifdef USE_SHADOWMAP directLight.color *= all(bvec2(directionalLight.shadow, directLight.visible)) ? getShadow(directionalShadowMap[i], directionalLight.shadowMapSize, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[i]) : 1.0; #endif RE_Direct(directLight, geometry, material, reflectedLight); } #endif // Point Light #if (NUM_POINT_LIGHTS > 0) PointLight pointLight; for (int i = 0; i < NUM_POINT_LIGHTS; i++) { pointLight = pointLights[i]; // 移除geometry参数 getPointDirectLightIrradiance(pointLight, directLight); #ifdef USE_SHADOWMAP directLight.color *= all(bvec2(pointLight.shadow, directLight.visible)) ? getPointShadow(pointShadowMap[i], pointLight.shadowMapSize, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[i]) : 1.0; #endif RE_Direct(directLight, geometry, material, reflectedLight); } #endif
内容的提问来源于stack exchange,提问作者kimbaudi
相关产品推荐
相关产品推荐

