OniDev Library
Bibliothèque C++ Multimédia - Game Engine
PrésentationLa bibliothèque onidev est comme son nom l'indique, la bibliothèque du projet OniDev. Elle est actuellement seulement utilisable en C++11 et permet l'élaboration rapide de programmes ou jeux.
C'est cette librairie que j'utilise pour développer Planet Centauri, et je la modifie au cours du développement afin qu'elle corresponde au mieux à ce qu'un game developper puisse avoir besoin. Elle n'est donc pour l'instant pas très stable au niveau de l'API, mais fonctionnelle.
Elle est actuellement basée sur OpenGL pour la partie graphique, et OpenAL pour la partie audio, et fonctionne uniquement sous windows et linux.
Il y aura un port mac prochainement.
Pourquoi C++11C++11 est une refonte totale du langage C++, et admet des nouveautés incontournables.
Cette bibliothèque en utilise une multitude comme les pointeurs intelligents, les std::thread et std::mutex, la sémantique move, les templates variadiques, les iterators pour la boucle foreach... et une multitude d'autres bonnes choses dont il est vraiment difficile de se passer quand on développe un gros projet.
Installation-Sous windows-
Nécessite MinGW 4.8.1 TDM disponible
ici (codeblocks-13.12mingw-setup-TDM-GCC-481.exe) ou
ici.
Téléchargement:
Bibliothèque + Dépendances + ExemplesContiens déjà toutes les dépendances de la bibliothèque, il suffit d'extraire le contenu de lib dans votre MinGW/lib et le contenu de include dans votre MinGW/include (pour ceux qui ont installé Code::Blocks MinGW se trouve généralement ici: C:\Program Files\CodeBlocks\MinGW).
Il vous suffit ensuite de lancer un des exemples si vous avez Code::Blocks.
-Sous linux-
Version incomplète de la bibliothèque:
http://wyvup.com/?c=A2QvQjX-Code de base
Pour ceux qui veulent faire un nouveau projet, vous pouvez soit récupérer directement le template de projet vide dans 'Examples\Window\Window',
soit créer votre projet manuellement:
- Code:
-
#include <onidev.h>
int main()
{
using namespace od;
Window win(640, 480, "OniDev app");
win.setSynchronization(true);
while(win.open())
{
win.ioHandle();
if(keyPressed(vk_escape))
break;
drawClear();
win.updateView();
win.screenRefresh();
}
return 0;
}
Compilable ensuite avec:Windows: g++ main.cpp -o out.exe -std=c++11 -lonidev -lwsock32 -lopengl32 -lglu32 -lgdi32 -luser32 -lkernel32 -lfreetype -lopenal32
Linux: g++ main.cpp -o out -std=c++11 -lonidev -lSDL2 -lGL -lopenal -lfreetype
Erreurs de compilation - Code:
-
c:\program files (x86)\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.7.1\..\..\..\..\include\onidev\core\streamReader.h|26|error: 'get' is not a member of 'std'|
Votre version de MinGW n'est pas assez récente, installer au moins MinGW version 4.8.1 TDM.
- Code:
-
||=== Build: Release in window (compiler: GNU GCC Compiler) ===|
c:\program files (x86)\codeblocks\mingw\include\onidev\graphics\opengl\extensions.h|48|error: 'PFNGLCREATESHADERPROC' does not name a type|
c:\program files (x86)\codeblocks\mingw\include\onidev\graphics\opengl\extensions.h|49|error: 'PFNGLDELETESHADERPROC' does not name a type|
c:\program files (x86)\codeblocks\mingw\include\onidev\graphics\opengl\extensions.h|50|error: 'PFNGLISSHADERPROC' does not name a type|
c:\program files (x86)\codeblocks\mingw\include\onidev\graphics\opengl\extensions.h|51|error: 'PFNGLSHADERSOURCEPROC' does not name a type|
...
Vérifiez que votre MinGW\include\GL\glext.h fais bien ~464ko, si ce n'est pas le cas vous avez du mal écraser l'ancien (qui fait moins d'une centaine de ko et qui n'est pas a jour), écrasez le manuellement avec le nouveau.
ExemplesPour ceux qui ne veulent pas télécharger l'archive ci-dessus, de nombreux exemples sont disponibles directement sur Github:
https://github.com/onidev/OniDev-ExamplesFeaturesLa bibliothèque est partagée en plusieurs modules.
Actuellement inclusWindow-Création de fenêtres avec un contexte graphique (opengl uniquement pour l'instant) et synchronisation verticale
-Gestion des événements clavier/souris/fenêtre
-Gestion des vues
-Gestion du temps et du framerate
Image-Chargement et sauvegarde d'images au format png, jpg, bmp
-Couleurs
-Rampes de couleurs pour la création de gradients
-Rasterization de glyphs de polices vectorielles (ttf, otf)
Graphics-Textures, filtrage, anisotropie, mipmaps, multitexturing
-Atlas de textures
-Sprites animés
-Polices et affichage de texte
-Surfaces avec possibilité d'utiliser un depth buffer pour la 3d
-Shaders
Particles-Systèmes de particules (chaque système est indépendant et contiens ses propres instances)
-Types de particules définissables (couleurs, vitesse, etc...)
-Moteur de rendu des particules (modifiable via polymorphisme)
-Moteur physique des particules (modifiable via polymorphisme)
-Modificateurs comme les attracteurs (d'autres définissables manuellement via polymorphisme)
-Émetteurs de particules et particules émettrices (émetteurs définissables manuellement via polymorphisme)
-Super attributs, pour contrôler totalement les attributs d'une particule émise
Math-vecteurs et matrices*
-quaternions*
-fonctions usuelles
Noise-Bruit de perlin (1d, 2d, 3d)
-Bruit simplex (1d, 2d, 3d)
-Bruit complexes prédéfinis (multi fractal, ridged, periodic...)
Collision-Rectangles alignés a l'axe
-Lignes
-Disques
-Masques binaires
-Polygones et polygones convexes
-Tilemaps
Game-Contexte d'instances de type variable (template)
-Instances d'objets avec events, masques et gestion des collisions de type variable (template)
-Rooms pour utiliser des tilemaps facilement
-Partitionnement de l'espace
Sound-Décodeurs ogg et wav
-Générateur
Audio-Contexte audio avec choix possible du device
-Sons avec priorités, pool de sons et gestion automatique des sources
-Système de streaming
-Jouer une musique dans un thread
-Sons 3d avec listener
Network-sockets tcp, udp, sélecteurs et écouteurs
-protocole irc*
-protocole http* et téléchargement de fichiers via http
System-parcours d'arborescences de fichiers
Markup-parseur xml
-parseur de string trees (un json like)
-parseur html
*certaines fonctionnalités peuvent manquer actuellement