react-native-filament
Version:
A real-time physically based 3D rendering engine for React Native
62 lines (60 loc) • 2.36 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.Camera = Camera;
var _reactNativeWorkletsCore = require("react-native-worklets-core");
var _useFilamentContext = require("../hooks/useFilamentContext");
var _RenderCallbackContext = require("./RenderCallbackContext");
// Sensible defaults:
const defaultCameraPosition = [0, 0, 8];
const defaultCameraTarget = [0, 0, 0];
const defaultCameraUp = [0, 1, 0];
const defaultFocalLengthInMillimeters = 28;
const defaultNear = 0.1;
const defaultFar = 100;
function Camera({
cameraManipulator,
...cameraConfig
}) {
const {
camera,
view
} = (0, _useFilamentContext.useFilamentContext)();
const {
aspect,
cameraUp = defaultCameraUp,
cameraTarget = defaultCameraTarget,
cameraPosition = defaultCameraPosition,
near = defaultNear,
far = defaultFar,
focalLengthInMillimeters = defaultFocalLengthInMillimeters
} = cameraConfig;
const cameraPositionX = cameraPosition[0];
const cameraPositionY = cameraPosition[1];
const cameraPositionZ = cameraPosition[2];
const cameraTargetX = cameraTarget[0];
const cameraTargetY = cameraTarget[1];
const cameraTargetZ = cameraTarget[2];
const cameraUpX = cameraUp[0];
const cameraUpY = cameraUp[1];
const cameraUpZ = cameraUp[2];
const prevAspectRatio = (0, _reactNativeWorkletsCore.useSharedValue)(0);
_RenderCallbackContext.RenderCallbackContext.useRenderCallback(() => {
'worklet';
const aspectRatio = view.getAspectRatio();
if (prevAspectRatio.value !== aspectRatio) {
prevAspectRatio.value = aspectRatio;
// Setup camera lens:
camera.setLensProjection(focalLengthInMillimeters, aspect ?? aspectRatio, near, far);
console.log('Setting up camera lens with aspect ratio:', aspectRatio);
}
if (cameraManipulator != null) {
camera.lookAtCameraManipulator(cameraManipulator);
} else {
camera.lookAt([cameraPositionX, cameraPositionY, cameraPositionZ], [cameraTargetX, cameraTargetY, cameraTargetZ], [cameraUpX, cameraUpY, cameraUpZ]);
}
}, [prevAspectRatio, camera, view, focalLengthInMillimeters, aspect, near, far, cameraManipulator, cameraPositionX, cameraPositionY, cameraPositionZ, cameraTargetX, cameraTargetY, cameraTargetZ, cameraUpX, cameraUpY, cameraUpZ]);
return null;
}
//# sourceMappingURL=Camera.js.map