1
0

faq.html 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. <!DOCTYPE html><html lang="zh"><head>
  2. <meta charset="utf-8">
  3. <title>常见问题</title>
  4. <meta name="viewport" content="width=device-width, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0">
  5. <meta name="twitter:card" content="summary_large_image">
  6. <meta name="twitter:site" content="@threejs">
  7. <meta name="twitter:title" content="Three.js – 常见问题">
  8. <meta property="og:image" content="https://threejs.org/files/share.png">
  9. <link rel="shortcut icon" href="../../files/favicon_white.ico" media="(prefers-color-scheme: dark)">
  10. <link rel="shortcut icon" href="../../files/favicon.ico" media="(prefers-color-scheme: light)">
  11. <link rel="stylesheet" href="../resources/lesson.css">
  12. <link rel="stylesheet" href="../resources/lang.css">
  13. <script type="importmap">
  14. {
  15. "imports": {
  16. "three": "../../build/three.module.js"
  17. }
  18. }
  19. </script>
  20. </head>
  21. <body>
  22. <div class="container">
  23. <div class="lesson-title">
  24. <h1>常见问题</h1>
  25. </div>
  26. <div class="lesson">
  27. <div class="lesson-main">
  28. <h2>哪种 3D 模型格式的支持最完善?</h2>
  29. <div>
  30. <p>
  31. 推荐使用 glTF(GL Transmission Format)格式来导入和导出资源。由于 glTF 专注于运行时资源传输,它体积紧凑、加载速度快。
  32. </p>
  33. <p>
  34. three.js 也提供了许多其他常见格式的加载器,如 FBX、Collada 和 OBJ 等。尽管如此,你应该始终优先在项目中建立基于 glTF 的工作流。
  35. </p>
  36. </div>
  37. <h2>为什么示例中有 meta viewport 标签?</h2>
  38. <div>
  39. <pre class="prettyprint notranslate lang-js" translate="no">&lt;meta name="viewport" content="width=device-width, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0"&gt;</pre>
  40. <p>这些标签用于控制移动端浏览器的视口大小和缩放比例(在移动端,页面内容的渲染尺寸可能与可见视口不同)。</p>
  41. <p>[link:https://developer.apple.com/library/content/documentation/AppleApplications/Reference/SafariWebContent/UsingtheViewport/UsingtheViewport.html Safari: Using the Viewport]</p>
  42. <p>[link:https://developer.mozilla.org/zh-CN/docs/Web/HTML/Viewport_meta_tag MDN: 使用 viewport meta 标签]</p>
  43. </div>
  44. <h2>如何在窗口缩放时保持场景比例?</h2>
  45. <p>
  46. 我们希望所有物体无论距离相机多远,在窗口缩放时都保持相同的显示大小。
  47. 解决这个问题的关键公式是给定距离下的可见高度:
  48. <pre class="prettyprint notranslate lang-js" translate="no">visible_height = 2 * Math.tan( ( Math.PI / 180 ) * camera.fov / 2 ) * distance_from_camera;</pre>
  49. 如果我们将窗口高度增加一定百分比,那么我们希望所有距离下的可见高度也增加相同的百分比。
  50. 这无法通过改变相机位置来实现,而需要改变相机的视野范围(field-of-view)。
  51. [link:http://jsfiddle.net/Q4Jpu/ 示例]。
  52. </p>
  53. <h2>为什么我的物体有一部分不可见?</h2>
  54. <p>
  55. 这可能是由于面剔除(face culling)导致的。每个面都有一个朝向,决定了哪一侧是正面、哪一侧是背面。默认情况下,剔除会移除背面。
  56. 要检查是否是这个问题,可以将材质的 side 属性设置为 THREE.DoubleSide。
  57. <pre class="prettyprint notranslate lang-js" translate="no">material.side = THREE.DoubleSide</pre>
  58. </p>
  59. <h2>为什么 three.js 对无效输入有时会返回奇怪的结果?</h2>
  60. <p>
  61. 出于性能考虑,three.js 在大多数情况下不会验证输入。确保所有输入有效是你的应用的责任。
  62. </p>
  63. <h2>能否在 Node.js 中使用 three.js?</h2>
  64. <p>
  65. 由于 three.js 是为 Web 构建的,它依赖于浏览器和 DOM API,而这些在 Node.js 中并不总是存在。部分问题可以通过使用
  66. [link:https://github.com/stackgl/headless-gl headless-gl] 和 [link:https://github.com/rstacruz/jsdom-global jsdom-global] 等 shim(兼容层)来解决,
  67. 或者用自定义替代方案替换 `TextureLoader` 等组件。其他 DOM API 可能与使用它们的代码深度耦合,更难处理。我们欢迎简洁且易于维护的 Pull Request 来改善 Node.js 支持,但建议先提交 issue 讨论你的改进方案。
  68. </p>
  69. </div>
  70. </div>
  71. </div>
  72. <script src="../resources/prettify.js"></script>
  73. <script src="../resources/lesson.js"></script>
  74. </body></html>
粤ICP备19079148号