ArcballControls.html 8.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286
  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:EventDispatcher] &rarr;
  11. <h1>弧球控制器([name])</h1>
  12. <p class="desc">
  13. ArcballControls 允许通过具有完全触摸支持和高级导航功能的虚拟轨迹球控制相机。<br>
  14. 光标/手指位置和移动被映射到由小控件表示的虚拟轨迹球表面上,并映射为直观且一致的相机移动。拖动光标/手指将使相机以保守的方式围绕轨迹球中心旋转(返回起始点将使相机返回到其起始方向)。<br><br>
  15. 除了支持平移、缩放和捏合手势之外, ArcballControls 还通过双击/点击提供 <i>聚焦</i> 功能,以便直观地将对象的兴趣点移动到虚拟轨迹球的中心。焦点可以在复杂的环境中更好地检查和导航。此外,
  16. ArcballControls 允许 FOV 操作(以眩晕方式)和 z 轴旋转。还支持通过剪贴板保存和恢复相机状态(使用 ctrl+c 和 ctrl+v 快捷键复制和粘贴状态)。<br><br>
  17. 不同于 [page:OrbitControls] 和 [page:TrackballControls],[name] 不需要在动画打开时在动画循环中从外部调用 [page:.update]。<br><br>
  18. 要使用此功能,与 /examples 目录中的所有文件一样,您必须将该文件单独包含在 HTML 中。
  19. </p>
  20. <h2>导入</h2>
  21. <p>
  22. [name] 是一个附加组件,必须显式导入。请参阅 [link:#manual/introduction/Installation Installation / Addons]。
  23. </p>
  24. <code>
  25. import { ArcballControls } from 'three/addons/controls/ArcballControls.js';
  26. </code>
  27. <h2>代码示例</h2>
  28. <code>
  29. const renderer = new THREE.WebGLRenderer();
  30. renderer.setSize( window.innerWidth, window.innerHeight );
  31. document.body.appendChild( renderer.domElement );
  32. const scene = new THREE.Scene();
  33. const camera = new THREE.PerspectiveCamera( 45, window.innerWidth / window.innerHeight, 1, 10000 );
  34. const controls = new ArcballControls( camera, renderer.domElement, scene );
  35. controls.addEventListener( 'change', function () {
  36. renderer.render( scene, camera );
  37. } );
  38. //controls.update() must be called after any manual changes to the camera's transform
  39. camera.position.set( 0, 20, 100 );
  40. controls.update();
  41. </code>
  42. <h2>例子</h2>
  43. <p>[example:misc_controls_arcball misc / controls / arcball ]</p>
  44. <h2>构造函数</h2>
  45. <h3>[name]( [param:Camera camera], [param:HTMLDOMElement domElement], [param:Scene scene] )</h3>
  46. <p>
  47. [page:Camera camera]:(必填)要控制的相机。相机不能是另一个对象的子对象,除非该对象是场景本身。<br><br>
  48. [page:HTMLDOMElement domElement]: 用于事件侦听器的 HTML 元素。<br><br>
  49. [page:Scene scene]: 相机渲染的场景。如果未给出,则小控件无法显示。
  50. </p>
  51. <h2>事件</h2>
  52. <h3>change</h3>
  53. <p>
  54. 当相机被小控件改变时触发。
  55. </p>
  56. <h3>start</h3>
  57. <p>
  58. 当交互开始时触发。
  59. </p>
  60. <h3>end</h3>
  61. <p>
  62. 当交互完成时触发。
  63. </p>
  64. <h2>属性</h2>
  65. <h3>[property:Boolean adjustNearFar]</h3>
  66. <p>
  67. 如果为 true,则每次执行缩放时都会调整相机的近端和远端值,尝试保持初始近端和远端值给出的相同可见部分(仅限 [page:PerspectiveCamera] )。默认为 false。
  68. </p>
  69. <h3>[property:Camera camera]</h3>
  70. <p>
  71. 被控制的摄像机。
  72. </p>
  73. <h3>[property:Boolean cursorZoom]</h3>
  74. <p>
  75. 设置为 true 以使缩放变为光标居中。
  76. </p>
  77. <h3>
  78. [property:Float dampingFactor]</h3>
  79. <p>
  80. 设置为 [page:.enableAnimations] 为true 时使用的阻尼惯性。
  81. </p>
  82. <h3>[property:HTMLDOMElement domElement]</h3>
  83. <p>
  84. HTMLDOMElement 用于监听鼠标/触摸事件。这必须在构造函数中传递;此处更改它不会设置新的事件侦听器。
  85. </p>
  86. <h3>[property:Boolean enabled]</h3>
  87. <p>
  88. 当设置为 时 `false`,小控件将不再响应用户交互。默认为 `true`。
  89. </p>
  90. <h3>[property:Boolean enableAnimations]</h3>
  91. <p>
  92. 设置为 true 以启用旋转(阻尼)和聚焦操作的动画。默认为 true。
  93. </p>
  94. <h3>[property:Boolean enableGrid]</h3>
  95. <p>
  96. 设置为 true 时,执行平移操作时将出现网格(仅限桌面交互)。默认为 false。
  97. </p>
  98. <h3>[property:Boolean enablePan]</h3>
  99. <p>
  100. 启用或禁用相机平移。默认为 true。
  101. </p>
  102. <h3>[property:Boolean enableRotate]</h3>
  103. <p>
  104. 启用或禁用相机旋转。默认为 true。
  105. </p>
  106. <h3>[property:Boolean enableZoom]</h3>
  107. <p>
  108. 启用或禁用相机变焦。
  109. </p>
  110. <h3>[property:Float focusAnimationTime]</h3>
  111. <p>
  112. 焦点动画的持续时间。
  113. </p>
  114. <h3>[property:Float maxDistance]</h3>
  115. <p>
  116. 最大移动距离(仅限 [page:PerspectiveCamera])。默认为无穷大。
  117. </p>
  118. <h3>[property:Float maxZoom]</h3>
  119. <p>
  120. 最大缩放值(仅限 [page:OrthographicCamera] )。默认为无穷大。
  121. </p>
  122. <h3>[property:Float minDistance]</h3>
  123. <p>
  124. 最小移动距离(仅限 [page:PerspectiveCamera] )。默认值为 0。
  125. </p>
  126. <h3>[property:Float minZoom]</h3>
  127. <p>
  128. 最小缩放值(仅限 [page:OrthographicCamera] )。默认值为 0。
  129. </p>
  130. <h3>[property:Float radiusFactor]</h3>
  131. <p>
  132. 小控件相对于屏幕宽度和高度的大小。默认值为 0.67。
  133. </p>
  134. <h3>[property:Float rotateSpeed]</h3>
  135. <p>
  136. 旋转速度。默认值为 1。
  137. </p>
  138. <h3>[property:Float scaleFactor]</h3>
  139. <p>
  140. 执行缩放操作时使用的缩放因子。
  141. </p>
  142. <h3>[property:Scene scene]</h3>
  143. <p>
  144. 相机渲染的场景。
  145. </p>
  146. <h3>[property:Float wMax]</h3>
  147. <p>
  148. 旋转动画开始时允许的最大角速度。
  149. </p>
  150. <h2>方法</h2>
  151. <h3>[method:undefined activateGizmos] ( [param:Boolean isActive] )</h3>
  152. <p>
  153. 使小控件或多或少可见。
  154. </p>
  155. <h3>[method:undefined copyState] ()</h3>
  156. <p>
  157. 将当前状态复制到剪贴板(作为可读的 JSON 文本)。
  158. </p>
  159. <h3>[method:undefined dispose] ()</h3>
  160. <p>
  161. 删除所有事件侦听器,取消任何待处理的动画并清除场景中的小控件和网格。
  162. </p>
  163. <h3>[method:undefined pasteState] ()</h3>
  164. <p>
  165. 从剪贴板设置控件状态,假设剪贴板存储从 [page:.copyState] 保存的 JSON 文本。
  166. </p>
  167. <h3>[method:undefined reset] ()</h3>
  168. <p>
  169. 将控件重置为上次调用 [page:.saveState] 时的状态或初始状态。
  170. </p>
  171. <h3>[method:undefined saveState] ()</h3>
  172. <p>
  173. 保存控件的当前状态。稍后可以使用 [page:.reset] 恢复。
  174. </p>
  175. <h3>[method:undefined setCamera] ( [param:Camera camera] )</h3>
  176. <p>
  177. 设置要控制的摄像机。必须调用才能设置要控制的新摄像机。
  178. </p>
  179. <h3>[method:undefined setGizmosVisible] ( [param:Boolean value] )</h3>
  180. <p>
  181. 设置小控件的可见属性。
  182. </p>
  183. <h3>[method:undefined setTbRadius] ( [param:Float value] )</h3>
  184. <p>
  185. 更新 `radiusFactor` 值,重新绘制小控件并发送 `changeEvent` 让可视化更新。
  186. </p>
  187. <h3>[method:Boolean setMouseAction] ( [param:String operation], mouse, key )</h3>
  188. <p>
  189. 通过指定要执行的操作和鼠标/按键组合来设置新的鼠标操作。如果发生冲突,则替换现有的。<br><br>
  190. 操作可以指定为 'ROTATE'、'PAN'、'FOV' 或 'ZOOM'。<br>
  191. 鼠标输入可以指定为鼠标按钮 0、1、2 或 'WHEEL'。<br>
  192. 键盘修饰符可以指定为 'CTRL'、'SHIFT' 或 null(如果不再需要) 。
  193. </p>
  194. <h3>[method:Boolean unsetMouseAction] ( mouse, key )</h3>
  195. <p>
  196. 通过指定 鼠标/按键 组合来删除鼠标操作。<br><br>
  197. 鼠标输入可以指定为鼠标按钮 0、1、2 或 'WHEEL'。<br>
  198. 键盘修饰符可以指定为 'CTRL'、'SHIFT' 或 null(如果不再需要) 。
  199. </p>
  200. <h3>[method:undefined update] ()</h3>
  201. <p>
  202. 更新控件。必须在对相机变换进行任何手动更改后调用。
  203. </p>
  204. <h3>[method:Raycaster getRaycaster] ()</h3>
  205. <p>
  206. 返回用于用户交互的 [page:Raycaster] 对象。如果设置了 [name] 的 [page:Object3D.layers .layers] 属性,您还需要使用匹配的值设置 [page:Raycaster.layers
  207. .layers] 的 [page:Raycaster] 属性,否则 [name] 将无法按预期工作。
  208. won't work as expected.
  209. </p>
  210. <h2>源代码</h2>
  211. <p>
  212. [link:https://github.com/mrdoob/three.js/blob/master/examples/jsm/controls/ArcballControls.js examples/jsm/controls/ArcballControls.js]
  213. </p>
  214. </body>
  215. </html>