Unigine.Camera Class
The Camera class is used to create a new camera, set it up (set all the required matrices, field of view, masks and so on) and then pass it to an instance of the Viewport class to render an image from this camera.
A camera instance can have the following masks:
- Sound Source mask
- Sound Reverberation mask
- Viewport mask
- Reflection Viewport mask
Camera settings can be set up in the Camera Settings in UnigineEditor.
Usage Example
In this example Camera and PlayerSpectator (which inherited from Player class) instances created and added to the current scene. Here is a code from the AppWorldLogic.cs file.
namespace UnigineApp
{
class AppWorldLogic : WorldLogic
{
PlayerSpectator playerSpectator;
Camera camera;
/* ... */
public override bool Init()
{
/* ... */
// initialize PlayerSpectator and Camera instances
playerSpectator = new PlayerSpectator();
camera = new Camera();
// specify the necessary camera parameters: FOV, ZNear, ZFar.
// add the post_sensor_red post-effect to camera
camera.setFov(110.0f);
camera.setZNear(0.1f);
camera.setZFar(10000.0f);
camera.setPostMaterials("post_sensor_red");
// set camera to the player
playerSpectator.setCamera(camera);
// specify the position and view direction of playerSpectator
playerSpectator.setViewDirection(new vec3(0.0f, 1.0f, 0.0f));
playerSpectator.setWorldPosition(new dvec3(-1.6f, -1.7f, 1.7f));
Game.Player = playerSpectator;
return 1;
}
}
}
Camera Class
Properties
int NumScriptableMaterials#
string PostMaterials#
int ReverbMask#
int SourceMask#
int ReflectionViewportMask#
int ViewportMask#
bool IsObliqueFrustum#
vec4 ObliqueFrustumPlane#
// AppWorldLogic.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Unigine;
namespace UnigineApp
{
class AppWorldLogic : WorldLogic
{
/* .. */
public override bool Update()
{
float time = Game.Time;
// initializing a plane to be set as a near clipping plane
dvec4 plane = new dvec4(1.0f, 1.0f, 1.0f, 1.0f + MathLib.Sin(time) * 4.0f);
// getting a camera
Camera camera = Game.Player.Camera;
if (camera != null)
{
// enabling oblique frustum
camera.ObliqueFrustum = true;
// setting our plane as an oblique near clipping plane
camera.ObliqueFrustumPlane = plane;
}
return true;
}
/* .. */
}
}
vec3 Up#
float ZFar#
float ZNear#
float FocalLength#
float FilmGate#
float Fov#
Returns the current vertical field of view of the camera.
You can use the following formula to calculate horizontal FOV from the vertical one for the given aspect ratio (width/height): FOV_h = 2 × atan ( (width / height) × tan(FOV_v / 2)).
Sets a vertical field of view of the camera and updates the projection matrix.
You can use the following formula to calculate horizontal FOV from the vertical one for the given aspect ratio (width/height): FOV_h = 2 × atan ( (width / height) × tan(FOV_v / 2)).
int FovFixed#
int FovMode#
- For the classic camera, the vertical FOV should be set. In this case, FOV is directly set in degrees.
- For the physically-based camera, the horizontal FOV should be set. In this case, FOV is calculated depending on the film gate and focal length of the camera.
mat4 Projection#
This method allows you to set your camera to use perspective or orthographic projection, depending on your project's requirements.
For example, you can use the following code to set up orthographic projection or perspective projection for your camera depending on a flag value:
// AppWorldLogic.cs
namespace UnigineApp
{
class AppWorldLogic : WorldLogic
{
Camera camera;
Player player;
/* ... */
// ortho flag - change this value to switch projection type
int ortho = 0;
public override bool Init()
{
/* ... */
// getting the camera of the current player
camera = Game.Player.Camera;
// setting up near and far clipping planes and aspect ratio
float znear = 0.001f;
float zfar = 10000.0f;
float aspect = 16.0f / 9.0f;
if (ortho)
{
// setting up orthographic projection
camera.Projection = MathLib.Ortho(-1.0f, 1.0f, -1.0f, 1.0f, znear, zfar);
}
else
{
// setting up perspective projection
camera.Projection = MathLib.Perspective(60.0f, aspect, znear, zfar);
}
// setting player's camera
Player player = Game.Player.Camera = camera;
return true;
}
}
}
mat4 Offset#
vec3 Position#
mat4 IModelview#
mat4 Modelview#
Members
static Camera ( ) #
Constructor. Creates a new camera with default settings:- Modelview, inverse modelview and offset matrices are 4×4 identity matrices.
- FOV is 60 degrees.
- Distance to the near clipping plane is 0.1 unit.
- Distance to the far clipping plane is 10000 units.
- Up direction vector is (0,0,1).
- Viewport, reflection, source and reverb masks are set to 00000001.
void GetDirectionFromScreen ( out vec3 p0, out vec3 p1, float screen_x, float screen_y, float aspect ) #
Casts the ray from a certain position on the screen.Arguments
- out vec3 p0 - Start coordinate of the ray.
- out vec3 p1 - End coordinate of the ray.
- float screen_x - X-coordinate of screen, in the [0;1] range, where 0 is the left upper point, 1 is the right lower point.
- float screen_y - Y-coordinate of screen, in the [0;1] range, where 0 is the left upper point, 1 is the right lower point.
- float aspect - Screen's aspect ratio (height to width).
vec3 GetDirectionFromScreen ( float screen_x, float screen_y, float aspect ) #
Casts the ray from a certain position on the screen.Arguments
- float screen_x - X-coordinate of screen, in the [0;1] range, where 0 is the left upper point, 1 is the right lower point.
- float screen_y - Y-coordinate of screen, in the [0;1] range, where 0 is the left upper point, 1 is the right lower point.
- float aspect - Screen's aspect ratio (height to width).
Return value
Point coordinate.mat4 GetProjectionFromScreen ( float screen_x0, float screen_y0, float screen_x1, float screen_y1, float aspect ) #
Creates a projection matrix out of 2 screen positions. This is required for the frame selection.Arguments
- float screen_x0 - X-coordinate of the first screen position, in the [0;1] range, where 0 is the left upper point, 1 is the right lower point.
- float screen_y0 - Y-coordinate of the first screen position, in the [0;1] range, where 0 is the left upper point, 1 is the right lower point.
- float screen_x1 - X-coordinate of the second screen position, in the [0;1] range, where 0 is the left upper point, 1 is the right lower point.
- float screen_y1 - Y-coordinate of the second screen position, in the [0;1] range, where 0 is the left upper point, 1 is the right lower point.
- float aspect - Screen's aspect ratio (height to width).
Return value
Projection matrix.int GetScreenPosition ( out float screen_x, out float screen_y, vec3 point, float aspect ) #
Projects the point in world coordinates to the screen. Screen coordinates are written into the first 2 variables passed to the method.Arguments
- out float screen_x - X-coordinate of the screen position.
- out float screen_y - Y-coordinate of the screen position.
- vec3 point - Point coordinates.
- float aspect - Aspect ratio (screen height to width).
Return value
1 if the point has been projected successfully; otherwise, 0.Camera Clone ( ) #
Clones the current camera and saves it to the given camera instance.Return value
Copy of the camera.mat4 GetAspectCorrectedProjection ( float aspect ) #
Returns projection matrix after correction for the specified aspect ratio. Currently fixed FOV component is taken into account.Arguments
- float aspect - Aspect ratio.
Return value
Projection matrix after correction for the specified aspect ratio.void AddScriptableMaterial ( Material material ) #
Attaches a new scriptable material to the camera. To apply a scriptable material globally, use the addScriptableMaterial() method of the Render class. The order of execution for scripts assigned to scriptable materials is defined by material's number in the list of the camera.Arguments
- Material material - Scriptable material to be attached to the camera.
void RemoveScriptableMaterial ( int num ) #
Removes the scriptable material with the specified number from the camera.Arguments
- int num - Scriptable material number in the range from 0 to the total number of scriptable materials.
int FindScriptableMaterial ( Material material ) #
Returns the number of the specified scriptable material for the camera. This number is camera-specific (valid for this camera only) and determines the order in which the assigned expressions are executed.Arguments
- Material material - Scriptable material for which a number is to be found.
Return value
Scriptable material number in the range from 0 to the total number of scriptable materials, or -1 if the specified material was not found.void SetScriptableMaterial ( int num, Material material ) #
Replaces the scriptable material with the specified number with the new scriptable material specified. The number of material determines the order in which the expressions assigned to it are executed. This number is camera-specific (valid for this camera only).Arguments
- int num - Scriptable material number in the range from 0 to the total number of scriptable materials.
- Material material - New scriptable material to replace the one with the specified number.
Material GetScriptableMaterial ( int num ) #
Returns a scriptable material attached to the camera by its number.Arguments
- int num - Scriptable material number in the range from 0 to the total number of scriptable materials.
Return value
Scriptable material attached to the camera with the specified number.void SetScriptableMaterialEnabled ( int num, bool enabled ) #
Enables or disables the scriptable material with the specified number. When a material is disabled (inactive), the scripts attached to it are not executed.Arguments
- int num - Scriptable material number in the range from 0 to the total number of scriptable materials.
- bool enabled - 1 to enable the scriptable material with the specified number, 0 to disable it.
bool GetScriptableMaterialEnabled ( int num ) #
Returns a value indicating if the scriptable material with the specified number attached to the camera is enabled (active). When a material is disabled (inactive), the scripts attached to it are not executed.Arguments
- int num - Scriptable material number in the range from 0 to the total number of scriptable materials.
Return value
1 if the scriptable material with the specified number is enabled; otherwise, 0.void SwapScriptableMaterials ( int num_0, int num_1 ) #
Swaps two scriptable materials with specified numbers. The number of material determines the order in which the expressions assigned to it are executed.Arguments
- int num_0 - Number of the first scriptable material in the range from 0 to the total number of scriptable materials.
- int num_1 - Number of the second scriptable material in the range from 0 to the total number of scriptable materials.