58 lines
2.4 KiB
Plaintext
58 lines
2.4 KiB
Plaintext
![]() |
/**
|
||
![]() |
* \dir src/graphics
|
||
![]() |
* \brief Graphics engine
|
||
|
*/
|
||
![]() |
|
||
![]() |
/**
|
||
|
* \namespace Gfx
|
||
|
* \brief Namespace for (new) graphics code
|
||
|
*
|
||
|
* This namespace was created to avoid clashing with old code, but now it still serves,
|
||
|
* defining a border between pure graphics engine and other parts of application.
|
||
![]() |
*/
|
||
![]() |
|
||
![]() |
/**
|
||
|
* \page graphics Graphics engine
|
||
|
*
|
||
|
* The graphics engine consists of 3 parts:
|
||
|
* * core - low-level device code (currently with only OpenGL implementation)
|
||
|
* * main engine - managing and displaying 3D environment (terrain, models, water, sky, effects, camera, etc.)
|
||
|
* * 2D interface - classes drawing the 2D interface (menus, buttons, editor, HUD elements)
|
||
|
*
|
||
|
* \section coords Drawing coordinates
|
||
|
*
|
||
|
* \subsection coords2d 2D interface
|
||
|
*
|
||
|
* 2D interface is drawn by setting orthogonal projection yielding the following 2D coordinate system:
|
||
|
*
|
||
|
* \image html 2d_coord.png
|
||
|
*
|
||
|
* Depth test is disabled for 2D interface, so Z coordinates are irrelevant.
|
||
|
*
|
||
|
* The coordinate system is constant and is independent of resolution or screen proportions.
|
||
|
*
|
||
|
* UI elements are laid out by computing these standard coordinates, using 640x480 resoultion as reference.
|
||
|
* That is, their coordinates are computed like so: x = 32.0f/640.0f, y = 400.0f/480.0f.
|
||
|
*
|
||
|
* \subsection coords3d 3D environment
|
||
|
*
|
||
|
* 3D environment is drawn using the following coordinate system:
|
||
|
*
|
||
|
* \image html 3d_canonical_coords.png
|
||
|
*
|
||
|
* The base coordinate system is like depicted above with viewport on Z=0 plane.
|
||
|
* The coordinates are then transformed by world, view and projection matrices to yield screen coordinates.
|
||
|
*
|
||
|
* The base coordinates are also model coordinates. All models must be modelled in this setup.
|
||
|
* Scale should be kept proportional to existing models.
|
||
|
*
|
||
|
* The world matrix defines the transformation from model coordinate system to the point and orientation
|
||
|
* in 3D scene. This matrix is defined one per every <i>graphics engine</i> object.
|
||
|
* (Note the emphasis - the objects as defined in game engine do not necessarily correspond to
|
||
|
* one graphics engine object.)
|
||
|
*
|
||
|
* The view and projection matrices define the viewing point and volume, and are mostly managed by Gfx::CCamera.
|
||
|
* View is defined by Math::LoadViewMatrix() function, that is using 3 vectors: eye position (eyePt),
|
||
|
* target point (lookatPt) and up vector (upVec). Projection is always perspective,
|
||
|
* with changing view angle (focus).
|
||
|
*/
|