GLTFLoader.html 8.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223
  1. <!DOCTYPE html>
  2. <html lang="zh">
  3. <head>
  4. <meta charset="utf-8" />
  5. <base href="../../../" />
  6. <script src="page.js"></script>
  7. <link type="text/css" rel="stylesheet" href="page.css" />
  8. </head>
  9. <body>
  10. [page:Loader] &rarr;
  11. <h1>GLTF加载器([name])</h1>
  12. <p class="desc">用于载入<em>glTF 2.0</em>资源的加载器。<br /><br />
  13. [link:https://www.khronos.org/gltf glTF](gl传输格式)是一种开放格式的规范
  14. ([link:https://github.com/KhronosGroup/glTF/tree/master/specification/2.0 open format specification]),
  15. 用于更高效地传输、加载3D内容。该类文件以JSON(.gltf)格式或二进制(.glb)格式提供,
  16. 外部文件存储贴图(.jpg、.png)和额外的二进制数据(.bin)。一个glTF组件可传输一个或多个场景,
  17. 包括网格、材质、贴图、蒙皮、骨架、变形目标、动画、灯光以及摄像机。
  18. </p>
  19. <p>
  20. [name] uses [page:ImageBitmapLoader] whenever possible. Be advised that image bitmaps are not automatically GC-collected when they are no longer referenced,
  21. and they require special handling during the disposal process. More information in the [link:https://threejs.org/docs/#manual/en/introduction/How-to-dispose-of-objects How to dispose of objects] guide.
  22. </p>
  23. <h2>导入</h2>
  24. <p>
  25. [name] 是一个附加组件,必须显式导入。
  26. See [link:#manual/introduction/Installation Installation / Addons].
  27. </p>
  28. <code>
  29. import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js';
  30. </code>
  31. <h2>扩展</h2>
  32. <p>
  33. GLTFLoader支持下列glTF 2.0扩展([link:https://github.com/KhronosGroup/glTF/tree/master/extensions/ glTF 2.0 extensions]):
  34. </p>
  35. <ul>
  36. <li>KHR_draco_mesh_compression</li>
  37. <li>KHR_materials_clearcoat</li>
  38. <li>KHR_materials_dispersion</li>
  39. <li>KHR_materials_ior</li>
  40. <li>KHR_materials_specular</li>
  41. <li>KHR_materials_transmission</li>
  42. <li>KHR_materials_iridescence</li>
  43. <li>KHR_materials_unlit</li>
  44. <li>KHR_materials_volume</li>
  45. <li>KHR_mesh_quantization</li>
  46. <li>KHR_lights_punctual</li>
  47. <li>KHR_texture_basisu</li>
  48. <li>KHR_texture_transform</li>
  49. <li>EXT_texture_webp</li>
  50. <li>EXT_meshopt_compression</li>
  51. <li>EXT_mesh_gpu_instancing</li>
  52. </ul>
  53. <p>
  54. The following glTF 2.0 extension is supported by an external user plugin
  55. </p>
  56. <ul>
  57. <li>[link:https://github.com/takahirox/three-gltf-extensions KHR_materials_variants]<sup>1</sup></li>
  58. <li>[link:https://github.com/takahirox/three-gltf-extensions MSFT_texture_dds]</li>
  59. </ul>
  60. <p><i>
  61. <sup>1</sup>You can also manually process the extension after loading in your application. See [link:https://threejs.org/examples/#webgl_loader_gltf_variants Three.js glTF materials variants example].
  62. </i></p>
  63. <h2>代码示例</h2>
  64. <code>
  65. // Instantiate a loader
  66. const loader = new GLTFLoader();
  67. // Optional: Provide a DRACOLoader instance to decode compressed mesh data
  68. const dracoLoader = new DRACOLoader();
  69. dracoLoader.setDecoderPath( '/examples/jsm/libs/draco/' );
  70. loader.setDRACOLoader( dracoLoader );
  71. // Load a glTF resource
  72. loader.load(
  73. // resource URL
  74. 'models/gltf/duck/duck.gltf',
  75. // called when the resource is loaded
  76. function ( gltf ) {
  77. scene.add( gltf.scene );
  78. gltf.animations; // Array&lt;THREE.AnimationClip&gt;
  79. gltf.scene; // THREE.Group
  80. gltf.scenes; // Array&lt;THREE.Group&gt;
  81. gltf.cameras; // Array&lt;THREE.Camera&gt;
  82. gltf.asset; // Object
  83. },
  84. // called while loading is progressing
  85. function ( xhr ) {
  86. console.log( ( xhr.loaded / xhr.total * 100 ) + '% loaded' );
  87. },
  88. // called when loading has errors
  89. function ( error ) {
  90. console.log( 'An error happened' );
  91. }
  92. );
  93. </code>
  94. <h2>例子</h2>
  95. <p>
  96. [example:webgl_loader_gltf]
  97. </p>
  98. <h2>纹理</h2>
  99. <p>纹理中包含的颜色信息(.map, .emissiveMap, 和 .specularMap)在glTF中总是使用sRGB颜色空间,而顶点颜色和材质属性(.color, .emissive, .specular)
  100. 则使用线性颜色空间。在典型的渲染工作流程中,纹理会被渲染器转换为线性颜色空间,进行光照计算,然后最终输出会被转换回 sRGB
  101. 颜色空间并显示在屏幕上。除非你需要使用线性颜色空间进行后期处理,否则请在使用glTF的时候将[page:WebGLRenderer]进行如下配置:</p>
  102. <code>
  103. renderer.outputColorSpace = THREE.SRGBColorSpace;
  104. </code>
  105. <p>假设渲染器的配置如上所示,则GLTFLoader将可以正确地自动配置从.gltf或.glb文件中引用的纹理。
  106. 当从外部加载纹理(例如,使用[page:TextureLoader])并将纹理应用到glTF模型,则必须给定对应的颜色空间与朝向:</p>
  107. <code>
  108. // If texture is used for color information, set colorspace.
  109. texture.colorSpace = THREE.SRGBColorSpace;
  110. // UVs use the convention that (0, 0) corresponds to the upper left corner of a texture.
  111. texture.flipY = false;
  112. </code>
  113. <h2>自定义扩展</h2>
  114. <p>
  115. 来自未知扩展的元数据会被保存到Object3D、Group和Material实例中上的“.userData.gltfExtensions”,
  116. 或被附加到 response “gltf”对象。示例:
  117. </p>
  118. <code>
  119. loader.load('foo.gltf', function ( gltf ) {
  120. const scene = gltf.scene;
  121. const mesh = scene.children[ 3 ];
  122. const fooExtension = mesh.userData.gltfExtensions.EXT_foo;
  123. gltf.parser.getDependency( 'bufferView', fooExtension.bufferView )
  124. .then( function ( fooBuffer ) { ... } );
  125. } );
  126. </code>
  127. <br>
  128. <hr>
  129. <h2>构造函数</h2>
  130. <h3>[name]( [param:LoadingManager manager] )</h3>
  131. <p>
  132. [page:LoadingManager manager] — 该加载器将要使用的 [page:LoadingManager loadingManager] 。默认为 [page:LoadingManager THREE.DefaultLoadingManager]。
  133. </p>
  134. <p>
  135. 创建一个新的[name]。
  136. </p>
  137. <h2>属性</h2>
  138. <p>共有属性请参见其基类[page:Loader]。</p>
  139. <h2>方法</h2>
  140. <p>共有方法请参见其基类[page:Loader]。</p>
  141. <h3>[method:undefined load]( [param:String url], [param:Function onLoad], [param:Function onProgress], [param:Function onError] )</h3>
  142. <p>
  143. [page:String url] — 包含有<em>.gltf</em>/<em>.glb</em>文件路径/URL的字符串。<br />
  144. [page:Function onLoad] — 加载成功完成后将会被调用的函数。该函数接收[page:Function parse]所返回的已加载的JSON响应。<br />
  145. [page:Function onProgress] — (可选)加载正在进行过程中会被调用的函数。其参数将会是XMLHttpRequest实例,包含有总字节数.[page:Integer total]与已加载的字节数.[page:Integer loaded]。<br />
  146. [page:Function onError] — (可选)若在加载过程发生错误,将被调用的函数。该函数接收error来作为参数。<br />
  147. </p>
  148. <p>
  149. 开始从url加载,并使用解析过的响应内容调用回调函数。
  150. </p>
  151. <h3>[method:this setDRACOLoader]( [param:DRACOLoader dracoLoader] )</h3>
  152. <p>
  153. [page:DRACOLoader dracoLoader] — DRACOLoader的实例,用于解码使用KHR_draco_mesh_compression扩展压缩过的文件。
  154. </p>
  155. <p>
  156. 请参阅[link:https://github.com/mrdoob/three.js/tree/dev/examples/jsm/libs/draco#readme readme]来了解Draco及其解码器的详细信息。
  157. </p>
  158. <h3>[method:undefined parse]( [param:ArrayBuffer data], [param:String path], [param:Function onLoad], [param:Function onError] )</h3>
  159. <p>
  160. [page:ArrayBuffer data] — 需要解析的glTF文件,值为一个ArrayBuffer或<em>JSON</em>字符串。<br />
  161. [page:String path] — 用于找到后续glTF资源(如纹理和.bin数据文件)的基础路径。<br />
  162. [page:Function onLoad] — 解析成功完成后将会被调用的函数。<br />
  163. [page:Function onError] — (可选)若在解析过程发生错误,将被调用的函数。该函数接收error来作为参数。<br />
  164. </p>
  165. <p>
  166. 解析基于glTF的ArrayBuffer或<em>JSON</em>字符串,并在完成后触发[page:Function onLoad]回调。[page:Function onLoad]的参数将是一个包含有已加载部分的[page:Object]:.[page:Group scene]、 .[page:Array scenes]、 .[page:Array cameras]、 .[page:Array animations] 和 .[page:Object asset]。
  167. </p>
  168. <h2>源代码</h2>
  169. <p>
  170. [link:https://github.com/mrdoob/three.js/blob/master/examples/jsm/loaders/GLTFLoader.js examples/jsm/loaders/GLTFLoader.js]
  171. </p>
  172. </body>
  173. </html>