LDrawLoader.html 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218
  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>LDraw加载器([name])</h1>
  12. <p class="desc"> 用于加载 `LDraw` 资源。<br /><br />
  13. [link:https://ldraw.org LDraw] (LEGO Draw) 是一种
  14. [link:https://ldraw.org/article/218.html 开放格式规范] ,用于描述 LEGO 和其他建筑套装 3D 模型。</p>
  15. <p>LDraw 资源(通常扩展名为 .ldr、.dat 或 .txt 的文本文件)可以仅描述单个构造件或整个模型。对于模型,LDraw 文件可以引用其他 LDraw 文件,这些文件是从使用 [page:Function
  16. setPartsLibraryPath] 设置的库路径加载的。您通常下载 LDraw 官方零件库,解压到一个文件夹并将 setPartsLibraryPath 指向它。
  17. </p>
  18. <p>库部件将通过子文件夹“parts”、“p” 和 “models” 中的反复试验来加载。这些文件访问对于 Web 环境来说并不是最佳的,因此我们制作了一个脚本工具来将 LDraw
  19. 文件及其所有依赖项打包到一个文件中,这样加载速度会更快。请参阅“打包 LDraw 模型”部分。LDrawLoader 示例加载多个打包文件。由于官方零件库较大,因此不包含在内。</p>
  20. <h2>导入</h2>
  21. <p>
  22. [name] 是一个附加组件,必须显式导入。请参阅 [link:#manual/introduction/Installation Installation / Addons].
  23. </p>
  24. <code>
  25. import { LDrawLoader } from 'three/addons/loaders/LDrawLoader.js';
  26. </code>
  27. <h2>扩展</h2>
  28. <p>
  29. [name] 支持以下扩展:
  30. </p>
  31. <ul>
  32. <li>!COLOUR: 颜色和表面光洁度声明。</li>
  33. <li>BFC: 背面剔除规范。</li>
  34. <li>!CATEGORY: 模型/零件类别声明。</li>
  35. <li>!KEYWORDS: 模型/零件关键字声明。</li>
  36. </ul>
  37. <h2>代码示例</h2>
  38. <code>
  39. // Instantiate a loader
  40. const loader = new LDrawLoader();
  41. // Optionally set library parts path
  42. // loader.setPartsLibraryPath( path to library );
  43. // Load a LDraw resource
  44. loader.load(
  45. // resource URL
  46. 'models/car.ldr_Packed.mpd',
  47. // called when the resource is loaded
  48. function ( group ) {
  49. // Optionally, use LDrawUtils.mergeObject() from
  50. // 'examples/jsm/utils/LDrawUtils.js' to merge all
  51. // geometries by material (it gives better runtime
  52. // performance, but building steps are lost)
  53. // group = LDrawUtils.mergeObject( group );
  54. scene.add( group );
  55. },
  56. // called while loading is progressing
  57. function ( xhr ) {
  58. console.log( ( xhr.loaded / xhr.total * 100 ) + '% loaded' );
  59. },
  60. // called when loading has errors
  61. function ( error ) {
  62. console.log( 'An error happened' );
  63. }
  64. );
  65. </code>
  66. <h2>例子</h2>
  67. <p>
  68. [example:webgl_loader_ldraw]
  69. </p>
  70. <h2>包装 LDraw 模型</h2>
  71. <p>要将模型及其所有引用文件打包,请下载 [link:https://www.ldraw.org/parts/latest-parts.html 官方 LDraw 零件库]
  72. 并使用以下节点脚本:[link:https://github.com/mrdoob/three.js/blob/master/utils/packLDrawModel.js utils/packLDrawModel.js]
  73. 它包含有关如何设置文件和执行文件的说明。</p>
  74. <h2>.userData 中的元数据</h2>
  75. <p>[name] 返回一个包含对象层次结构的 [page:Group] 。根据每个子对象类型,其 .userData 成员将包含以下成员:<br />
  76. 在 [page:Group]中, userData 成员将包含:<br />
  77. <ul>
  78. <li>.numBuildingSteps: 仅在 [page:Group] 根部,表示模型中构建步骤的总数。这些可用于设置对象的可见性以显示不同的构建步骤,这在示例中完成。</li>
  79. <li>.buildingStep: 表示该步骤的构建索引。</li>
  80. <li>.category: 如果不为空,则包含该作品或模型的 [page:String] 类别。</li>
  81. <li>.keywords: 如果不为空,则包含该作品或模型的 [page:String] 关键字数组。</li>
  82. </ul>
  83. </p>
  84. <p>在 [page:Material] 中,userData 成员将包含:
  85. <ul>
  86. <li>.code: 表示该材料的 LDraw 代码。</li>
  87. <li>.edgeMaterial: 仅在 [page:Mesh] 材质中,表示属于相同颜色代码的边的 [page:LineBasicMaterial] (在LDraw格式中,每个表面材质也与一个边缘材质相关)</li>
  88. <li>.conditionalEdgeMaterial: 仅在 [page:LineSegments] 材质中,表示属于相同颜色代码的条件边的 [page:Material]。</li>
  89. </ul>
  90. </p>
  91. <br>
  92. <hr>
  93. <h2>构造函数</h2>
  94. <h3>[name]( [param:LoadingManager manager] )</h3>
  95. <p>
  96. [page:LoadingManager manager] — 加载器使用的 [page:LoadingManager loadingManager] 。默认值为 [page:LoadingManager
  97. THREE.DefaultLoadingManager]。
  98. </p>
  99. <p>
  100. 创建一个新的 [name]。
  101. </p>
  102. <h2>Properties</h2>
  103. <p>有关公共属性,请参阅 [page:Loader] 基类。</p>
  104. <h2>Methods</h2>
  105. <p>有关常用方法,请参阅 [page:Loader] 基类。</p>
  106. <h3>[method:undefined load]( [param:String url], [param:Function onLoad], [param:Function onProgress], [param:Function
  107. onError] )</h3>
  108. <p>
  109. [page:String url] — 包含 LDraw 文件的路径/URL 的字符串。<br />
  110. [page:Function onLoad] — 加载成功完成后调用的函数。该函数接收从 [page:Function parse] 返回的加载的 JSON 响应。<br />
  111. [page:Function onProgress] — (可选)加载过程中调用的函数。参数将是 XMLHttpRequest 实例,其中包含 .[page:Integer total] 和 .[page:Integer
  112. loaded] 字节。如果服务器没有设置 Content-Length,.[page:Integer total] 将为 0。<br />
  113. [page:Function onError] — (可选)加载期间发生错误时调用的函数。该函数接收错误作为参数。<br />
  114. </p>
  115. <p>
  116. 开始从 url 加载并使用解析的响应内容调用回调函数。
  117. </p>
  118. <h3>[method:this setPartsLibraryPath]( [param:String path] )</h3>
  119. <p>
  120. [page:String path] — 用于加载引用零件的库零件文件的路径。这与 [page:Loader.setPath] 不同,后者指示加载主资源的路径。<br />
  121. </p>
  122. <p>
  123. 必须在 [page:.load] 之前调用此方法,除非要加载的模型不引用库部件(通常它将是一个所有部件都打包在单个文件中的模型)。
  124. </p>
  125. <h3>[method:this setFileMap]( [param:Map fileMap] )</h3>
  126. <p>
  127. [page:Map map] — 设置从 [page:String] 到 [page:String] 的映射,将引用的库文件名映射到新文件名。如果未指定
  128. fileMap(默认值),则将通过子文件夹“parts”、“p”和“models”中的反复试验来访问库部件。
  129. </p>
  130. <h3>[method:undefined parse]( [param:String text], [param:String path], [param:Function onLoad], [param:Function
  131. onError] )</h3>
  132. <p>
  133. [page:String text] — 要解析的 LDraw 资源,作为字符串。<br />
  134. [page:String path] — 从中查找其他引用的 LDraw 资源文件的基本路径。<br />
  135. [page:Function onLoad] — 解析完成时调用的函数。<br />
  136. </p>
  137. <p>
  138. 将 LDraw 文件内容解析为字符串,并在完成时触发 [page:Function onLoad] 回调。[page:Function onLoad] 的参数将是一个 [page:Group],其中包含
  139. [page:Group]、[page:Mesh] 和
  140. [page:LineSegments] 的层次结构(以及 .userData 字段中的其他零件数据)。
  141. </p>
  142. <h3>[method:Material getMaterial]( [param:String colourCode] )</h3>
  143. <p>
  144. [page:String colourCode] — 用于获取关联 [page:Material] 的颜色代码。
  145. </p>
  146. <h3>[method:String getMainMaterial]()</h3>
  147. <p>
  148. 返回主 LDraw 颜色的 [page:Material]。
  149. </p>
  150. <p>对于已加载的 LDraw 资源,返回与主颜色代码关联的 [page:Material]。此方法可用于修改模型或暴露模型的零件的主要材质。
  151. </p>
  152. <p>
  153. 主要颜色代码是为 LDraw
  154. 零件着色的标准方法。三角形为“16”,边为“24”。通常,完整的模型不会暴露主要颜色(也就是说,没有零件在顶层使用代码“16”,因为它们被分配了其他特定颜色)另一方面,LDraw零件文件将暴露代码“16”可以着色,并且可以有附加的固定颜色。
  155. </p>
  156. <h3>[method:String getMainEdgeMaterial]()</h3>
  157. <p>
  158. 返回边缘主 LDraw 颜色的 [page:Material]。
  159. </p>
  160. <h3>[method:void preloadMaterials]( [param:String path] )</h3>
  161. <p>
  162. [page:String path] — LDraw 材料资源的路径。
  163. </p>
  164. <p>此异步方法从单个 LDraw 文件预加载材质。在官方零件库中,有一个特殊文件,始终首先加载(LDConfig.ldr)并包含所有标准颜色代码。此方法旨在与未打包的文件一起使用,例如在预加载材料并按需加载部件的编辑器中。</p>
  165. <h2>源代码</h2>
  166. <p>
  167. [link:https://github.com/mrdoob/three.js/blob/master/examples/jsm/loaders/LDrawLoader.js examples/jsm/loaders/LDrawLoader.js]
  168. </p>
  169. </body>
  170. </html>