【发布时间】:2021-04-06 02:25:55
【问题描述】:
我正在尝试了解如何使用 PMREMGenerator. 正确预处理 envMaps
我现在的情况:
我在设置场景后立即创建一个 PMREM,并编译它的 equirectangular 着色器(我不清楚编译步骤,但这是我在示例中看到的):
this.mPmremGenerator = new THREE.PMREMGenerator(this.mRenderer);
this.mPmremGenerator.compileEquirectangularShader();
接下来,我使用 TextureLoader 加载 envmap 纹理,并在其回调中使用fromEquirectangular 将 envmap 预处理为 RenderTarget,并从中提取新纹理并返回。
private preprocessEnvMap(pEnvMap: Texture) {
const WorldContext.mainScene.pmremGenerator;
return aPmremGenerator.fromEquirectangular(pEnvMap).texture;
}
最后,我获取返回的纹理,将其指定为我的材质的envMap,并调用材质的needsUpdate = true。
结果是我得到一个着色器错误:
THREE.WebGLProgram: shader error: 0 35715 false gl.getProgramInfoLog No compiled fragment shader when at least one graphics shader is attached.
我们将不胜感激,
谢谢
编辑:
这是我将PMREMGenerator 与标准材料一起使用的示例:
https://codepen.io/tfreifeld/pen/OJWgdem
您可以看到背景中的图像和 envmap 中的图像都是模糊的。
这是原图:
【问题讨论】:
标签: three.js