Ogre 3D is a cross-platform SDK for creating graphical applications. It has quite extensive features such as full support for OpenGL and Direct3D, full compatibility with Windows, Linux, Mac OS X and iOS platforms, support for a wide selection of file formats, advanced particle system, programming of the GPU and all high-level shader languages, and much more.
If it became interesting, then I ask under cat. You ask why Ogre 3D? I will not argue that this is the best free library for working with graphics, but I can bring its obvious advantages:
A huge community (this is a forum, these are wikis, unofficial site localizations, etc.);
The library is quite easy to manage and, by its capabilities, is not inferior to expensive graphics engines;
MIT License;
Support for a large number of platforms;
There are “ports” and “wrappers” for C #, Java, Python, Ruby, etc.
I want to emphasize that this library was created for rendering three-dimensional graphics and is not a “game engine”, as it often came up with a mistaken opinion. Here is an example of a high-level architecture typical of many games:
')
Ogre is an object-oriented framework that includes all parts of the rendering process in an object model. With an object-oriented approach to rendering geometry, the need to interact with it directly completely disappears. Also, Ogre does not require knowledge of its full architecture. You can write an application knowing Ogre very superficially, and you can study it up and down, it all depends on what you need and how complicated the project you want to write. For manipulation of objects in the library, intuitive methods are used, unlike the usual 3D API, in which, for example, to rotate an object, you need to achieve the correct transformation of the matrix, instead of simply calling the method with the axis of rotation and degrees (radians). Traditionally, to render your scenes and objects, you set the state of the render using various API calls, send geometry information using several more API calls, and another API call specified the API and GPU to draw the geometry. In short - “Lather, rinse, repeat”.
Let's look at the relationship between the structure of a scene graph and its contents:
Entity objects contain one or more SubEntity objects. These subentity are exactly the objects that are drawn. Scene nodes themselves can exist without any objects attached to them (if you need it, of course). MovableObject is simply attached to the node, that is, movable objects are not created subclasses of the node, which of course gives some advantages.
Another feature of Ogre is the plugin system. The fact is that the library was designed to be extensible, that is, designed as a set of connected components that interact with each other through certain interfaces. For example, Ogre interacts with the scene graph at the interface level, and you probably already guessed that the implementation of the scene graph can be "connected" to the Ogre library (if necessary). Plugins do not require rebuilding the library itself, since Ogre provides simple means of loading plug-in libraries.
Ogre also has a very powerful materials system. The system of scripting materials Ogre is one of the most flexible and powerful software available in this class. The most impressive feature of the Ogre material system is the automatic fallback design; Ogre can automatically apply the “best” technique available to the material and continue searching further down the list of techniques until it finds one that is compatible with the graphics hardware used. Ogre will also do everything possible to reorganize passes in a technique if the graphic card does not support even the least dependent technique in the material. For example, if this hardware supports only one unit of texture in its pipeline, and your simplest technique requires at least two texture units, Ogre will split the passage into two separate and combine the two results to get the same effect. You are not limited to content management scripting alone. All the classes and methods that Ogre uses to create materials from the script are fully accessible to your application; you can create materials entirely in code, procedurally, and, in fact, this is done quite often.
Ogre supports three types of animation: skeletal, morph-animation and posture animation. All types of animation can be calculated both in software and hardware, using vertex programs.
A relatively new addition to the baggage capabilities of Ogre is the Composition Framework, which gives the user the ability to create complex, two-dimensional, full-screen post-processing effects on a viewport. For example, a viewport can add a full-screen glow effect, or black-and-white tint or sepia filters, or an image can be made “drawn”, hatched, with sharp edges, etc. Whatever you think can be done with the framework.
Literature: Pro Ogre 3D Programming
PS This is a brief overview of Ogre 3D, and if you are interested and you would like, then in the future I can write a sequel about the main systems and how to manage them.