Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revisionNext revisionBoth sides next revision | ||
0.8.4:cameras [2022/07/20 14:32] – [Smooth Camera Controller] admin | 0.8.4:cameras [2022/07/20 16:07] – [Creating a Smooth Controller at Runtime] admin | ||
---|---|---|---|
Line 33: | Line 33: | ||
===== Target ===== | ===== Target ===== | ||
- | A very useful property of Firemonkey' | + | A very useful property of Firemonkey' |
You can use this property for easy camera navigation in 3D space. Combine a camera component with a non-visual TDummy instance to navigate. | You can use this property for easy camera navigation in 3D space. Combine a camera component with a non-visual TDummy instance to navigate. | ||
Line 134: | Line 134: | ||
===== Smooth Camera Controller ===== | ===== Smooth Camera Controller ===== | ||
- | Since version 0.8.4.2341 a TGorillaViewport component provides an embedded // | + | Since version 0.8.4.2341 a TGorillaViewport component provides an embedded // |
This enables an easy-to-use mouse navigation for your 3D scene without any effort. | This enables an easy-to-use mouse navigation for your 3D scene without any effort. | ||
Line 143: | Line 143: | ||
* Shifting / Translating on X-, Y- and Z-axis | * Shifting / Translating on X-, Y- and Z-axis | ||
- | It is called " | + | It is called " |
- | Nevertheless you're able to control this smoothness by a variety of properties: | + | Nevertheless you're able to control this smoothness |
^Property ^ Description^ | ^Property ^ Description^ | ||
Line 178: | Line 178: | ||
^Function^ | ^Function^ | ||
- | |function GetDesignCamera() : TCamera; virtual;| | + | |function GetDesignCamera() : TCamera;| |
- | |function GetDesignCameraController() : TGorillaSmoothCameraController; virtual;| | + | |function GetDesignCameraController() : TGorillaSmoothCameraController; |
==== Creating a Smooth Controller at Runtime ==== | ==== Creating a Smooth Controller at Runtime ==== | ||
Line 190: | Line 190: | ||
In the following code snippet we modify rotation manually in user-specific mouse events. | In the following code snippet we modify rotation manually in user-specific mouse events. | ||
+ | We're also blocking shifting, because we only want to rotate the camera. | ||
<file pascal> | <file pascal> | ||
Line 219: | Line 220: | ||
procedure TForm1.FormCreate(Sender: | procedure TForm1.FormCreate(Sender: | ||
begin | begin | ||
+ | /// Deactivate design camera controller before registering user-specific events for mouse feedback | ||
+ | GorillaViewport1.UsingDesignCamera := FALSE; | ||
+ | | ||
+ | /// Register user-specific mouse events to control our camera | ||
GorillaViewport1.OnMouseUp | GorillaViewport1.OnMouseUp | ||
GorillaViewport1.OnMouseDown := DoOnViewportMouseDown; | GorillaViewport1.OnMouseDown := DoOnViewportMouseDown; | ||
GorillaViewport1.OnMouseMove := DoOnViewportMouseMove; | GorillaViewport1.OnMouseMove := DoOnViewportMouseMove; | ||
| | ||
+ | /// Create a smooth camera controller | ||
FCameraCtrl := TGorillaSmoothCameraController.Create(GorillaViewport1); | FCameraCtrl := TGorillaSmoothCameraController.Create(GorillaViewport1); | ||
FCameraCtrl.Parent := GorillaViewport; | FCameraCtrl.Parent := GorillaViewport; | ||
- | FCameraCtrl.Types := []; | + | |
+ | /// NOTICE: Enable only rotation. Disable zooming and shifting | ||
+ | | ||
+ | /// Create our own camera for this controller | ||
FMyCamera := TGorillaCamera.Create(FCameraCtrl); | FMyCamera := TGorillaCamera.Create(FCameraCtrl); | ||
FMyCamera.Parent := FCameraCtrl; | FMyCamera.Parent := FCameraCtrl; | ||
+ | /// Link the camera to the controller | ||
FCameraCtrl.Camera := FMyCamera; | FCameraCtrl.Camera := FMyCamera; | ||
+ | | ||
+ | /// Activate the camera for rendering | ||
+ | GorillaViewport1.Camera := FMyCamera; | ||
| | ||
[...] | [...] |