在加载3dtiles时,用tinygltf解析b3dm中的glb缓冲区,加载出来的倾斜非常暗。

原因:tinygltf材质中,金属度的默认值为1(详情请查阅pbr材质相关文档)

  • 金属度是没有漫反射的,光线进入物体之后会被迅速吸收,因此baseColor实际会乘一个逆金属度,即color = baseColor * (1-metallicFactor)
  • 而tinygltf材质的默认金属度为1,因此color=0。又因有其他项,所以整体来说,渲染结果很暗,并不会完全黑
//File: tiny_gltf.h
// pbrMetallicRoughness class defined in glTF 2.0 spec.
struct PbrMetallicRoughness {
  std::vector<double> baseColorFactor;  // len = 4. default [1,1,1,1]
  TextureInfo baseColorTexture;
  double metallicFactor;   // default 1
  double roughnessFactor;  // default 1
  TextureInfo metallicRoughnessTexture;

  Value extras;
  ExtensionMap extensions;

  // Filled when SetStoreOriginalJSONForExtrasAndExtensions is enabled.
  std::string extras_json_string;
  std::string extensions_json_string;

  PbrMetallicRoughness()
      : baseColorFactor(std::vector<double>{1.0, 1.0, 1.0, 1.0}),
        metallicFactor(1.0),
        roughnessFactor(1.0) {}
  DEFAULT_METHODS(PbrMetallicRoughness)
  bool operator==(const PbrMetallicRoughness &) const;
};

将它的默认值改为0即可

// pbrMetallicRoughness class defined in glTF 2.0 spec.
struct PbrMetallicRoughness {
  double metallicFactor;   // default 0

  PbrMetallicRoughness()
      : baseColorFactor(std::vector<double>{1.0, 1.0, 1.0, 1.0}),
        metallicFactor(0.0),
        roughnessFactor(1.0) {}
};

更改后的效果