From 40d13ee8bb92665c8a08fdc7c672fb4879d925fb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hanno=20J=2E=20G=C3=B6decke?= Date: Tue, 16 Jul 2024 16:53:15 +0200 Subject: [PATCH] camera docs --- .github/workflows/deploy-docs.yml | 1 + docs/docs/guides/CAMERA.mdx | 97 +++++++++++++++++++++++++- docs/static/img/camera-projection.png | Bin 0 -> 35841 bytes package/src/types/Boxes.ts | 10 ++- package/src/types/Camera.ts | 15 ---- 5 files changed, 105 insertions(+), 18 deletions(-) create mode 100644 docs/static/img/camera-projection.png diff --git a/.github/workflows/deploy-docs.yml b/.github/workflows/deploy-docs.yml index fd9e6610..e4f62aae 100644 --- a/.github/workflows/deploy-docs.yml +++ b/.github/workflows/deploy-docs.yml @@ -6,6 +6,7 @@ on: - "docs/**" branches: - main + - chore/docs # Review gh actions docs if you want to further define triggers, paths, etc # https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#on diff --git a/docs/docs/guides/CAMERA.mdx b/docs/docs/guides/CAMERA.mdx index 61cb9495..e5b50cf5 100644 --- a/docs/docs/guides/CAMERA.mdx +++ b/docs/docs/guides/CAMERA.mdx @@ -5,4 +5,99 @@ sidebar_label: Camera slug: /guides/camera --- -Documentation is added soon! \ No newline at end of file +import useBaseUrl from '@docusaurus/useBaseUrl' + +## The `` components + +Your 3D scene needs to be projected to a 2D surface, your view. The camera is the "eye" through which you're looking +in the 3D space and which determines how the 3D scene is projected to the 2D surface. + +- Only one camera per scene is supported currently +- Only perspective cameras are supported currently + +The perspective camera has a + +- Position +- A point in space it looks at +- (An up vector that determines the orientation of the camera, but usually the default is fine) + +```tsx +import { Camera } from 'react-native-filament' + + +``` + + + +### Controlling the projection matrix + +The camera coordinate system defines the *view space*. The camera points towards its -z axis +and is oriented such that its top side is in the direction of +y, and its right side in the +direction of +x. + +There are three parameters that control the projection matrix: + +#### `near` plane + +- The closest distance from the camera at which objects will be rendered +- Objects closer to the camera than the near plane are clipped and not displayed +- Default is `0.1m` + +
+ Impact of the `near` plane on the level of detail / performance. + +The `near` plane greatly affects the depth buffer resolution (the level of detail). For performance reasons, it is recommended to keep the near plane as far as possible (default is `0.1m`). +The table below shows how the precision drops for various `near` plane values (smaller values are better). + + | near (m) | 1 m | 10 m | 100 m | 1 Km | + |----------|--------|--------|--------|--------| + | 0.001 | 7.2e-5 | 0.0043 | 0.4624 | 48.58 | + | 0.01 | 6.9e-6 | 0.0001 | 0.0430 | 4.62 | + | 0.1 | 3.6e-7 | 7.0e-5 | 0.0072 | 0.43 | + | 1.0 | 0 | 3.8e-6 | 0.0007 | 0.07 | + +
+ +#### `far` plane + +- The farthest distance from the camera at which objects will be rendered +- Objects farther from the camera than the far plane are clipped and not displayed +- Default is `100m` + +## The camera manipulator + +The camera can be controlled by a helper utility called [`CameraManipulator`](../api/interfaces/CameraManipulator), which enables complex gestures such as orbiting, panning, and zooming. + +Currently only a `ORBIT` mode is supported (in the future `MAP` and `FREE_FLIGHT` could be added as well). + +This shows how to implement a simple camera manipulator, for the full example see the [CameraPan example](https://github.com/margelo/react-native-filament/blob/main/package/example/Shared/src/CameraPan.tsx): + +```tsx +import { Camera, useCameraManipulator } from 'react-native-filament' +import { Gesture } from 'react-native-gesture-handler' + +const cameraManipulator = useCameraManipulator({ + orbitHomePosition: [0, 0, 8], // "Camera location" + targetPosition: [0, 0, 0], // "Looking at" + orbitSpeed: [0.003, 0.003], +}) + +const panGesture = Gesture.Pan() + .onBegin((event) => { + const yCorrected = viewHeight - event.translationY + cameraManipulator?.grabBegin(event.translationX, yCorrected, false) // false means rotation instead of translation + }) + .onUpdate((event) => { + const yCorrected = viewHeight - event.translationY + cameraManipulator?.grabUpdate(event.translationX, yCorrected) + }) + .onEnd(() => { + cameraManipulator?.grabEnd() + }) + +return +``` + diff --git a/docs/static/img/camera-projection.png b/docs/static/img/camera-projection.png new file mode 100644 index 0000000000000000000000000000000000000000..6173d73ec954922ae5c9f842318bcd1ca732b61b GIT binary patch literal 35841 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 literal 0 HcmV?d00001 diff --git a/package/src/types/Boxes.ts b/package/src/types/Boxes.ts index 069e11e1..bb8d96e0 100644 --- a/package/src/types/Boxes.ts +++ b/package/src/types/Boxes.ts @@ -28,7 +28,10 @@ export interface BaseBox { * An axis aligned 3D box represented by its center and half-extent. */ export interface Box extends BaseBox { - // Note: this property isn't set on the object and is just for type checking + /** + * @private + * Note: this property isn't set on the object and is just for type checking + */ _type: 'Box' } @@ -36,6 +39,9 @@ export interface Box extends BaseBox { * An axis aligned box represented by its min and max coordinates */ export interface AABB extends BaseBox { - // Note: this property isn't set on the object and is just for type checking + /** + * @private + * Note: this property isn't set on the object and is just for type checking + */ _type: 'AABB' } diff --git a/package/src/types/Camera.ts b/package/src/types/Camera.ts index 2073a5d6..088a772a 100644 --- a/package/src/types/Camera.ts +++ b/package/src/types/Camera.ts @@ -7,21 +7,6 @@ import { CameraManipulator } from './CameraManipulator' * * A Camera has a position and orientation and controls the projection and exposure parameters. * - * ## Creation and destruction - * - * In Filament, Camera is a component that must be associated with an entity. To do so, - * use `Engine#createCamera(int)`. A Camera component is destroyed using - * `Engine#destroyCameraComponent(int Entity)`. - * - * ```typescript - * const myCamera = engine.createCamera(myCameraEntity); - * myCamera.setProjection(45, 16.0/9.0, 0.1, 1.0); - * myCamera.lookAt(0, 1.60, 1, - * 0, 0, 0, - * 0, 1, 0); - * engine.destroyCameraComponent(myCameraEntity); - * ``` - * * ## Coordinate system * * The camera coordinate system defines the *view space*. The camera points towards its -z axis