DRACOLoader.html 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
  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>[name]</h1>
  12. <p class="desc">
  13. 一个用于加载经过Draco压缩的图形库。 <br /><br />
  14. [link:https://google.github.io/draco/ Draco]是一个开源的库,主要用于压缩和解压缩三维模型及点云。
  15. 以客户端上解压缩为代价,显著减少压缩的图形。
  16. </p>
  17. <p>
  18. 独立的Draco文件后缀为`.drc`,其中包含顶点坐标,法线,颜色和其他的属性,
  19. Draco文件*不*包含材质,纹理,动画和节点结构-为了能使用这些特征,需要将Draco图形
  20. 嵌入到GLTF文件中。使用[link:https://github.com/AnalyticalGraphicsInc/gltf-pipeline glTF-Pipeline]可以将一个普通的GLTF文件转化为经过Draco压缩的GLTF文件。
  21. 当使用Draco压缩的GLTF模型时,[page:GLTFLoader]内部会调用DRACOLoader。
  22. </p>
  23. <p>
  24. 推荐创建一个DRACOLoader实例并重用,可以有效避免重复创建加载多个解压器实例。
  25. </p>
  26. <h2>导入</h2>
  27. <p>
  28. [name]是一个插件,必须显示引用。
  29. 请参考 [link:#manual/introduction/Installation Installation / Addons]。
  30. </p>
  31. <code>
  32. import { DRACOLoader } from 'three/addons/loaders/DRACOLoader.js';
  33. </code>
  34. <h2>代码示例</h2>
  35. <code>
  36. // Instantiate a loader
  37. const loader = new DRACOLoader();
  38. // Specify path to a folder containing WASM/JS decoding libraries.
  39. loader.setDecoderPath( '/examples/jsm/libs/draco/' );
  40. // Optional: Pre-fetch Draco WASM/JS module.
  41. loader.preload();
  42. // Load a Draco geometry
  43. loader.load(
  44. // resource URL
  45. 'model.drc',
  46. // called when the resource is loaded
  47. function ( geometry ) {
  48. const material = new THREE.MeshStandardMaterial( { color: 0x606060 } );
  49. const mesh = new THREE.Mesh( geometry, material );
  50. scene.add( mesh );
  51. },
  52. // called as loading progresses
  53. function ( xhr ) {
  54. console.log( ( xhr.loaded / xhr.total * 100 ) + '% loaded' );
  55. },
  56. // called when loading has errors
  57. function ( error ) {
  58. console.log( 'An error happened' );
  59. }
  60. );
  61. </code>
  62. <h2>例子</h2>
  63. <p>
  64. [example:webgl_loader_draco]
  65. </p>
  66. <h2>浏览器兼容性</h2>
  67. <p>DRACOLoader会根据浏览器的特性,自动使用JS或者WASM解码库。</p>
  68. <br>
  69. <hr>
  70. <h2>构造函数</h2>
  71. <h3>[name]( [param:LoadingManager manager] )</h3>
  72. <p>
  73. [page:LoadingManager manager] — 加载器使用的[page:LoadingManager loadingManager]. 默认值为[page:LoadingManager THREE.DefaultLoadingManager].
  74. </p>
  75. <p>
  76. 创建一个新的[name].
  77. </p>
  78. <h2>属性</h2>
  79. <p>查看公共属性请参考基类[page:Loader]</p>
  80. <h2>方法</h2>
  81. <p>查看公共方法请查看基类[page:Loader]</p>
  82. <h3>[method:undefined load]( [param:String url], [param:Function onLoad], [param:Function onProgress], [param:Function onError] )</h3>
  83. <p>
  84. [page:String url] — 一个`.drc`文件的路径或者网络地址。<br />
  85. [page:Function onLoad] — 加载成功之后调用的函数。<br />
  86. [page:Function onProgress] — (可选的) 正在加载时调用的函数。参数为XMLHttpRequest实例,包含.[page:Integer total]和.[page:Integer loaded]<br />
  87. [page:Function onError] — (可选的)加载出现错误时调用的函数。该函将错误信息作为参数。<br />
  88. </p>
  89. <p>
  90. 开始加载解压缩的图形并调用`onLoad`函数。
  91. </p>
  92. <h3>[method:this setDecoderPath]( [param:String value] )</h3>
  93. <p>
  94. [page:String value] — 包含JS和WASM解压缩库的文件夹路径。
  95. </p>
  96. <h3>[method:this setDecoderConfig]( [param:Object config] )</h3>
  97. <p>
  98. [page:String config.type] - (可选的) `"js"`或`"wasm"`。<br />
  99. </p>
  100. <p>
  101. 为解压缩库提供配置,在解压开始后不能修改。
  102. </p>
  103. <h3>[method:this setWorkerLimit]( [param:Number workerLimit] )</h3>
  104. <p>
  105. [page:Number workerLimit] - 可以分配的最大线程数。默认值为4。<br />
  106. </p>
  107. <p>
  108. 设置用于解码的[link:https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API/Using_web_workers Web Workers]的最大值。如果线程也用于其他的任务,给定更小的限制会更合理。
  109. </p>
  110. <h3>[method:this preload]()</h3>
  111. <p>
  112. 如果还没加载完成,则请求解压库。
  113. </p>
  114. <h3>[method:this dispose]()</h3>
  115. <p>
  116. 处理解压资源和释放的内存。在处理后,解码器
  117. [link:https://github.com/google/draco/issues/349 不能重新加载].
  118. </p>
  119. <h2>源代码</h2>
  120. <p>
  121. [link:https://github.com/mrdoob/three.js/blob/master/examples/jsm/loaders/DRACOLoader.js examples/jsm/loaders/DRACOLoader.js]
  122. </p>
  123. </body>
  124. </html>