微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Three.js RGBE Loader 使用 URL

如何解决Three.js RGBE Loader 使用 URL

我想将 HDR 加载到我的场景中,但我没有本地存储的文件,它是一个 URL。似乎 RGBE 加载程序有问题,因为它是错误文件格式。这是错误消息:THREE.RGBELoader Bad File Format: bad initial token。我想我不能只传递 URL,但我不知道如何处理它。

这是我的加载器的代码

import { UnsignedByteType,PMREMGenerator } from "three";

import { RGBELoader } from "three/examples/jsm/loaders/RGBELoader";

export default function initRGBE(renderer,scene,hdr) {
  return new Promise((resolve,reject) => {
    console.log(hdr);
    new RGBELoader().setDataType(UnsignedByteType).load(
      hdr,texture => {
        const pmremGenerator = new PMREMGenerator(renderer);
        pmremGenerator.compileEquirectangularshader();
        const envMap = pmremGenerator.fromEquirectangular(texture).texture;
        scene.environment = envMap;
        texture.dispose();
        pmremGenerator.dispose();
        resolve();
      },xhr => {
        console.log(`HDR ${Math.floor((xhr.loaded / xhr.total) * 100)}% loaded`);
      },err => {
        reject(new Error(err));
      }
    );
  });
}

解决方法

我想通了。我的代码没有问题。问题是我的 Webpack 配置(我使用 Vue)。没有意识到这一点,因为当您不使用本地文件时,webpack 不会抛出错误。这个解决方案是特定于 Vue 的,但我认为你可以把它放在一个普通的 Webpack 配置文件中。

//vue.config.js
module.exports = {
  configureWebpack: {
    module: {
      rules: [{ test: /\.hdr$/,use: "url-loader" }]
    }
  }
};

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。