Jelajahi Sumber

docs: jsdocs for useCamera

alvarosabu 2 tahun lalu
induk
melakukan
b839dd8c6f

+ 44 - 9
packages/tres/src/core/useCamera/index.ts

@@ -26,7 +26,7 @@ export interface OrthographicCameraOptions {
 }
 
 interface UseCameraReturn {
-  activeCamera: Ref<Camera>
+  activeCamera: Ref<Camera | undefined>
   createCamera: (cameraType?: CameraType, options?: PerspectiveCameraOptions | OrthographicCameraOptions) => Camera
   updateCamera: () => void
   pushCamera: (camera: Camera) => void
@@ -36,9 +36,35 @@ interface UseCameraReturn {
 const VERTICAL_FIELD_OF_VIEW = 45
 let camera: Camera
 
+/**
+ * Create and update cameras
+ *
+ * ```ts
+ * import { useCamera } from '@tresjs/core'
+ * const { createCamera, updateCamera } = useCamera()
+ * const camera = createCamera(new PerspectiveCamera(45, 1, 0.1, 1000))
+ * updateCamera()
+ * ```
+ *
+ * @export
+ * @return {*}  {UseCameraReturn}
+ */
 export function useCamera(): UseCameraReturn {
   const { state, setState } = useTres()
 
+  /**
+   * Create camera and push to Tres `state.cameras` array
+   *
+   * ```ts
+   * import { useCamera } from '@tresjs/core'
+   * const { createCamera } = useCamera()
+   * const camera = createCamera(new PerspectiveCamera(45, 1, 0.1, 1000))
+   * ```
+   *
+   * @param {*} [cameraType=CameraType.Perspective]
+   * @param {(PerspectiveCameraOptions | OrthographicCameraOptions)} [options]
+   * @return {*}
+   */
   function createCamera(
     cameraType = CameraType.Perspective,
     options?: PerspectiveCameraOptions | OrthographicCameraOptions,
@@ -50,7 +76,7 @@ export function useCamera(): UseCameraReturn {
         fov: VERTICAL_FIELD_OF_VIEW,
       }
       camera = new PerspectiveCamera(fov, state.aspectRatio?.value || 1, near, far)
-      state.cameras.push(camera as PerspectiveCamera)
+      state.cameras?.push(camera as PerspectiveCamera)
     } else {
       const { left, right, top, bottom, near, far } = (options as OrthographicCameraOptions) || {
         left: -100,
@@ -61,7 +87,7 @@ export function useCamera(): UseCameraReturn {
         far: 1000,
       }
       camera = new OrthographicCamera(left, right, top, bottom, near, far)
-      state.cameras.push(camera as OrthographicCamera)
+      state.cameras?.push(camera as OrthographicCamera)
     }
     state.camera = camera
     return camera
@@ -69,25 +95,34 @@ export function useCamera(): UseCameraReturn {
 
   setState('camera', state.camera)
 
+  /**
+   * Update camera aspect ratio and projection matrix
+   *
+   */
   function updateCamera() {
     if (state.camera instanceof PerspectiveCamera && state.aspectRatio) {
       state.camera.aspect = state.aspectRatio.value
     }
-    state.camera.updateProjectionMatrix()
+    state.camera?.updateProjectionMatrix()
   }
 
+  /**
+   * Push camera to cameras array and update aspect ratio if camera is PerspectiveCamera
+   *
+   * @param {Camera} camera
+   */
   function pushCamera(camera: Camera): void {
-    /*     if (camera && currentCamera) {
-      currentCamera.value = camera
-      setState('camera', currentCamera)
-    } */
-    state.cameras.push(camera)
+    state.cameras?.push(camera)
     if (camera instanceof PerspectiveCamera && state.aspectRatio) {
       camera.aspect = state.aspectRatio.value
     }
     camera.updateProjectionMatrix()
   }
 
+  /**
+   * Clear cameras array
+   *
+   */
   function clearCameras() {
     state.cameras = []
   }

+ 2 - 2
packages/tres/src/core/useCamera/useCamera.test.ts

@@ -1,6 +1,6 @@
-import { computed, provide } from 'vue'
+import { computed } from 'vue'
 import { OrthographicCamera, PerspectiveCamera } from 'three'
-import { describe, test, expect, beforeEach, vi, afterEach } from 'vitest'
+import { describe, test, expect, vi, afterEach } from 'vitest'
 import { withSetup } from '/@/utils/test-utils'
 import { CameraType, useCamera } from '.'