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 mask
Camera settings can be set up in the Camera Settings in UnigineEditor.
Camera Class
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 setFov(float fov)
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)).
Arguments
- float fov - New vertical field of view in degrees. The provided value will be saturated in the range [0;180].
float getFov()
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)).
Return value
Vertical field of view in degrees.Mat4 getIModelview()
Returns the inverted view matrix of the camera.Return value
Inverse view matrix.void setModelview(Mat4 modelview)
Updates a modelview and inverse modelview matrices for the camera.Arguments
- Mat4 modelview - New view matrix.
Mat4 getModelview()
Returns the current view matrix of the camera.Return value
Current view matrix.void setObliqueFrustum(int enabled)
Enables or disables obliqueness of the viewing frustum.Arguments
- int enabled - 1 to enable oblique viewing frustum; 0 to disable it.
int isObliqueFrustum()
Returns a value indicating if the viewing frustum is oblique.Return value
1 if the viewing frustum is oblique; otherwise, 0.void setObliqueFrustumPlane(Vec4 clipping_plane)
Sets the oblique near clipping plane of the viewing frustum./* .. */
int update() {
float time = engine.game.getTime();
// initializing a plane to be set as a near clipping plane
Vec4 plane = Vec4(1.0f, 1.0f, 1.0f, 1.0f + sin(time) * 4.0f);
// getting a player and a camera
Player player = engine.game.getPlayer();
Camera camera = player.getCamera();
if (camera != NULL)
{
// enabling oblique frustum
camera.setObliqueFrustum(1);
// setting our plane as an oblique near clipping plane
camera.setObliqueFrustumPlane(plane);
}
player.setCamera(camera);
return 1;
}
/* .. */
Arguments
- Vec4 clipping_plane - World coordinates of the oblique near clipping plane to set (Nx, Ny, Nz, D), where Nx, Ny, Nz - coordinates of the plane normal, D - distance from the origin to the plane.
Vec4 getObliqueFrustumPlane()
Returns the oblique near clipping plane of the viewing frustum.Return value
World coordinates of the oblique near clipping plane to set (Nx, Ny, Nz, D), where Nx, Ny, Nz - coordinates of the plane normal, D - distance from the origin to the plane.void setOffset(mat4 offset)
Sets an additional transformation (an offset matrix) for the camera. This transformation is applied after the modelview transformation. The offset matrix does not affect the view matrix or the position of the camera. For example, the offset matrix can be used to simulate camera shaking from an explosion.Arguments
- mat4 offset - Offset matrix.
mat4 getOffset()
Returns an additional transformation (an offset matrix) set for the camera. This transformation is applied after modelview transformation. The offset matrix does not affect the view matrix or the position of the camera. For example, it can be used to simulate camera shake from an explosion.Return value
Offset matrix.void setPosition(Vec3 position)
Sets a new position of the camera and updates the modelview and inverse modelview (its 3rd column) matrices.Arguments
- Vec3 position - Camera position in the world space.
Vec3 getPosition()
Returns the current position of the camera. The position vector is stored in the 3rd column of the inverse view matrix.Return value
Camera position in the world space.void setPostMaterials(string materials)
Sets post postprocess materials that are applied after all other postprocess are rendered. They are used after engine.render.setPostMaterials(), if any.Arguments
- string materials - Comma-separated names of postprocess materials.
string getPostMaterials()
Returns names of the current post postprocess materials that are applied after all other postprocess are rendered. They are used after engine.render.getPostMaterials(), if any.Return value
Name of the current post postprocess materials.void setProjection(mat4 projection)
Updates the current projection matrix.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:
// world.usc
Camera camera;
Player player;
/* ... */
// ortho flag - change this value to switch projection type
int ortho_flag = 0;
int init(){
/* ... */
// getting the camera of the current player
camera = engine.game.getPlayer().getCamera();
// 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_flag)
{
// setting up orthographic projection
camera.setProjection(ortho(-1.0f, 1.0f, -1.0f, 1.0f, znear, zfar));
}
else
{
// setting up perspective projection
camera.setProjection(perspective(60.0f, aspect, znear, zfar));
}
// setting player's camera
player = engine.game.getPlayer();
player.setCamera(camera);
return 1;
}
Arguments
- mat4 projection - Projection matrix.
mat4 getProjection()
Returns the current projection matrix with unit (1.0) aspect ratio.Return value
Projection matrix.void setReflectionMask(int mask)
Sets a bit mask for rendering reflections into the viewport. Reflections are rendered in the viewport if masks of reflective materials match this one.Arguments
- int mask - Integer, each bit of which is used to set a mask.
int getReflectionMask()
Returns the current bit mask for rendering reflections into the camera viewport. Reflections are rendered in the camera viewport if masks of reflective materials match this one.Return value
Integer, each bit of which is used to set a mask.void setReverbMask(int mask)
Updates a bit mask that determines what reverberation zones can be heard. For sound to reverberate, at least one bit of this mask should match a reverb mask of the sound source and a reverb mask of the reverberation zone. Masks of a sound source and reverberation zone can match the camera's one in several bits, not necessarily one.Arguments
- int mask - Integer, each bit of which is a mask for reverberating sound sources and reverberation zones.
int getReverbMask()
Returns the current bit mask that determines what reverberation zones can be heard. For sound to reverberate, at least one bit of this mask should match a reverb mask of the sound source and a reverb mask of the reverberation zone. Masks of a sound source and reverberation zone can match with the camera's one in several bits, not necessarily one.Return value
Integer, each bit of which is used to set a mask for reverberating sound sources and reverberation zones.void setSourceMask(int mask)
Updates a bit mask that determines what sound sources can be heard. For a sound source to be heard, its mask should match this one in at least one bit. Plus, the volume of sound channel in which the sound plays (its number also depends on this mask) should not be equal to 0.Arguments
- int mask - Integer, each bit of which specifies a sound channel.
int getSourceMask()
Returns a bit mask that determines what sound channels can be heard. For a sound source to be heard, its mask should match this one in at least one bit. Plus, the volume of sound channel in which the sound plays (its number also depends on this mask) should not be equal to 0.Return value
Integer, each bit of which specifies a sound channel.void setUp(vec3 up)
Sets an up direction of the camera's viewport (i.e. tilt of the camera's viewport).Arguments
- vec3 up - New upward direction vector. The vector is normalized to 1.
vec3 getUp()
Returns the current up direction of the camera's viewport (i.e. tilt of the camera's viewport).Return value
Upward direction vector.void setViewportMask(int mask)
Sets a bit mask for rendering into the viewport. Object surfaces, materials, decals, lights and GUI objects will be rendered into the viewport only if their viewport masks match the camera's one (one matching bit is enough).Arguments
- int mask - Integer, each bit of which is used to set a mask.
int getViewportMask()
Returns the current bit mask for rendering into the viewport. Object surfaces, materials, decals, lights and GUI objects will be rendered into the viewport only if their viewport mask matches the camera's one (one matching bit is enough).Return value
Integer, each bit of which is used to set a mask.void setZFar(float zfar)
Sets a distance to the far clipping plane of the camera's viewing frustum and updates the projection matrix.Arguments
- float zfar - New distance in units. If a negative value is provided, 0 will be used instead.
float getZFar()
Returns the current distance to the far clipping plane of the camera's viewing frustum.Return value
Distance in units.void setZNear(float znear)
Sets a distance to the near clipping plane of the camera's viewing frustum and updates the projection matrix.Arguments
- float znear - New distance in units. If a negative value is provided, 0 will be used instead.
float getZNear()
Returns the current distance to the near clipping plane of the camera's viewing frustum.Return value
Distance in units.Camera clone()
Clones the current camera and saves it to the given camera instance.Return value
Copy of the camera.void setFovMode(int mode)
Sets the value indicating the type of FOV that is used for the camera:- 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.
Arguments
- int mode - FOV_MODE_VERTICAL for the camera with the vertical FOV; FOV_MODE_PHYSICALLY_BASED_CAMERA for the physically-based camera with the horizontal FOV.
int getFovMode()
Sets the value indicating the type of FOV that is used for the camera.Return value
0 if the camera with the vertical FOV is used; 1 if the physically-based camera with the horizontal FOV is used.void setFilmGate(float gate)
Sets a film gate for the physically-based camera with horizontal FOV.Arguments
- float gate - Film gate.
float getFilmGate()
Returns a film gate for the physically-based camera with horizontal FOV.Return value
Film gate.void setFocalLength(float length)
Sets a focal length of the physically-based camera lens.Arguments
- float length - Camera lens focal length.
float getFocalLength()
Returns the focal length of the physically-based camera lens.Return value
Camera lens focal length.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.int getFovFixed()
Returns a value indicating which FOV component (horizontal or vertical) is currently fixed.Return value
Current fixed FOV component, one of the CAMERA_FOV_FIXED_* values.int CAMERA_FOV_MODE_PHYSICALLY_BASED_CAMERA
Description
Physically based mode. Horizontal FOV of the physically-based camera is calculated using the focal length and film gate values according to the following formula:
FOV_h = 2 * atan(film_gate / (2 * focal_length)) * UNIGINE_RAD2DEG