Je vais essayer de faire ici une présentation du wrapper .NET non officiel d'Irrlicht : Irrlicht .NET CP (Cross-Platform).
Je ne garantie pas que ça soit court, mais ça sera complet (peut-être même un peu trop, notamment pour décrire Irrlicht).
Note de préambule :
Irrlicht .NET CP est un wrapper pour Irrlicht en C#. Il ne sagit pas du wrapper officiel (nommé "Irrlicht .NET"), ni d'un projet créé/géré par l'équipe du moteur Irrlicht. Ce n'est pas non plus un projet concurrent du wrapper officiel, c'est un projet qui a même commencé sur une ligne complètement différente, voilà pourquoi je ne comparerai pas forcémment les deux, mais justifierai juste les grandes lignes.
Présentation :
Irrlicht .NET CP (CP = Cross-Platform, multi-plateforme) est un wrapper entièrement codé sous Linux pour le moteur Irrlicht. La base du projet est donc de fournir un moteur 3D complet, disponible sur Linux, Mac OS et Windows, et fonctionnant pour n'importe quel langage .NET (au hasard, C#, VB .NET, Delphi .NET, C++/CLI, F#...). Il a été commencé en Juin 2006 et la première release a été faite début Juillet 2006 sur le forum d'Irrlicht.
Je suis pour l'instant le seul membre de l'équipe mais j'ai reçu de l'aide d'une très grande quantité de personnes, pour le debug notamment.
License :
Avant tout je précise que le wrapper est sous la même license que le moteur Irrlicht, à savoir zlib/libpng, celle-ci autorise n'importe qui à modifier, recompiler, redistribuer le wrapper sans aucune limitation ni obligation si ce n'est celle de ne pas prétendre avoir écrit le logiciel de base, celle de ne pas prétendre que l'auteur du logiciel de base est responsable de votre modification et celle de bien vouloir (si possible) citer l'auteur et/ou mettre un lien.
Cependant, en utilisant le wrapper on utilise Irrlicht qui elle-même utilise les travaux du groupe JPEG et qui eux sont sous une license demandant de citer le nom obligatoirement (plus d'infos sur leur site).
Techniques :
Avant de se lancer dans l'explication, il faut d'abord mettre une chose au clair : "Irrlicht .NET CP" n'est le nom que d'une des deux parties du wrapper.
Il y a en réalité deux parties :
-IrrlichtW, wrapper en C de la librairie Irrlicht, créé par l'équipe d'Irrlicht .NET CP.
-Irrlicht .NET CP, wrapper en C# d'IrrlichtW.
Les langages utilisés sont donc :
-C : partie externe d'IrrlichtW
-C++ : partie interne d'échanges avec Irrlicht
-C# : wrapper .NET
La librairie en C est appelée par le code C# au moyens des Platform Invoke, technique fonctionnant à la fois sous le framework .NET et sous le runtime Mono (pour Linux et autres plateformes).
Ainsi, Irrlicht .NET CP n'existe qu'en une seule version et ce pour toutes les plateformes, alors qu'IrrlichtW existe en une version pour chaque plateforme (IrrlichtW.dll/Irrlicht.dll pour Windows, IrrlichtW.so pour Linux, IrrlichtW.dylib -non officielle- pour Mac OS X).
De même, une application codée dans n'importe quel langage .NET, sous n'importe quel système d'exploitation supporté marchera sans aucune recompilation ni d'Irrlicht .NET CP, ni du programme en question.
Notez enfin qu'IrrlichtW ne constitue pas la partie la plus importante du wrapper. En effet, IrrlichtW n'est utilisé que pour faire fonctionner Irrlicht .NET CP, et n'est pas calculé pour être utilisé directement (bien qu'il puisse l'être).
Etat d'Avancement :
-99.9% des librairies de base d'Irrlicht sont retranscrites (je ne met pas 100% car il se peut que j'ai fait un oubli mais en général quand c'est le cas, il est corrigé immédiatement).
-La capacité de créer ses propre SceneNode dans un langage .NET est présente, il en est de même pour les animateurs, les affecteurs de particules et les émetteurs de particules.
-Irrlicht .NET CP se dote d'une fonction inédite dans sa version 0.6 : Irrlicht Extensions. Il sagit d'une librairie anexe fournissant une série de SceneNode et autres utilitaires à utiliser avec Irrlicht .NET CP très simplement et directement dans le code .NET. De plus, toute extension est sous license zlib/libpng.
Avantages (et comparaison) :
-Un taux d'avancement bien plus élevé.
-Des fonctions qui ne seront jamais présentes probablement dans Irrlicht .NET officiel telles que les Custom scene Nodes ou les animateurs personnalisés.
-Une architecture très évolutive, ajouter une fonction à la librairie nécessite peu de lignes de code et le tout reste très facilement compréhensible.
-Une architecture aussi très calculée et optimisée, travailler sous Linux/Mono oblige à une rigueur quant aux fonctionnalités que l'on utilise et à l'optimisation du tout, cette obligation permettant au wrapper de parfois tourner plus vite que son équivalent en natif.
-Taux de progression plus élevé, je ne garantie pas que ça reste le cas pendant les 30 années à venir mais le moteur évolue actuellement très vite, avec de nouvelles fonctionnalités/extensions chaque jour ainsi que des "bugfixes" très fréquents.
-Avantage imparable : Aspect multi-plateforme, qui ne peut pas être présent avec la technique qu'emploie le wrapper officiel.
Sur ce dernier point je rajouterai qu'Irrlicht .NET CP est actuellement le seul vrai moteur .NET tournant sur Linux (avec possibilité de MacOS). J'ai reçu quelques mails à ce sujet, notamment comme quoi OgreDotNet "pouvait" tourner sur d'autres plate-formes cependant Irrlicht .NET CP est garanti puisque codé sous Linux. Il ne plantera pas sous Linux, ni sous Windows pour X ou Y raisons. Tout ce qui est testé sur l'un l'est sur l'autre et tout ce qui marche sur l'un doit marcher sur l'autre.
Il n'y a que 1% du code d'IrrlichtW qui varie selon le système d'exploitation et il sagit des préfixes d'exportation des librairies...
Mini compilation de FAQ :
-Q : Je n'y connais rien moi à Linux... J'ai mon VIsual Studio et ça me suffit ! Ca veut dire que mon application ne tournera jamais sous Linux ?
-R : Faux, avec Irrlicht .NET CP, n'importe quelle application faite avec n'importe quel système d'exploitation tournera sur n'importe quel autre système d'exploitation. Pour l'instant deux systèmes sont supportés officiellement : Windows et Linux, mais Mac OS est fonctionnel et testé. Il faut cependant nuancer en disant que si vous utilisez d'autres fonctionnalités qu'Irrlicht .NET CP dans votre jeu, rien ne garantie que celles-ci fonctionnent avec d'autres systèmes.
-Q : Est-ce qu'en utilisant Irrlicht .NET CP je vais faire perdre beaucoup de FPS ? J'ai lu partout que le code .NET était plus lent !
-R : On ne fait pas de troll mais en terme d'affichage 3D, ce qui est lourd sont tous les calculs faits par le moteur et par la carte graphique. Dans le cas d'Irrlicht .NET CP, tout ce code est un code natif c'est à dire en C++. D'ailleurs dans une petite application bien codée, la perte de FPS est NULLE car au final, ce qui prend 99% du temps c'est le code natif (IrrlichtW donc). Maintenant dans une énorme application utilisant plein de scene nodes écrites en langage .NET et tournant au maximum des ressources, il est impossible de répondre à la question. Sachez juste que plus important que le langage que l'on utilise, la manière dont on l'utilise détermine tout.
-Q : J'y crois pas, je vois pas pourquoi je téléchargerais une librairie faite par un inconnu en deux semaines alors que le wrapper officiel est là depuis plus d'un an et créé par le créateur d'Irrlicht... Expliquez-moi, comment c'est possible ?
-R : J'ai eu des tonnes de questions analogues, y répondre précisémment prendrait l'espace de tout un post d'autant plus que je l'ai déjà fait en français. (cliquez ici pour lire la discussion).
-Q : Je suis séduit ! Seulement voilà j'ai mon application tournant déjà avec Irrlicht .NET officiel et je me demande si changer pour .NET CP sera dur. Qu'en est-il ?
-R : Probablement la seule réponse triste, changer du wrapper officiel au wrapper CP n'est pas forcémment aussi simple qu'on pourrait l'imaginer et ce pour plusieurs raisons. La première est que j'ai voulu coller aux conventions de nommage de la plateforme .NET qui n'étaient pas forcémment respectées dans le wrapper officiel. La seconde est que je n'ai pas forcémment recopié les mêmes fonctions surchargées donc parfois une fonction n'a pas assez ou trop d'argument par rapport à la version du wrapper officiel. Enfin la dernière est que j'ai collé trait pour trait à l'architecture de la version C++ du moteur ce qui parfois peut entraîner des changements dans le code. J'ai l'habitude de répondre que quand on connaît un minimum les deux wrappers, changer de l'un à l'autre prend dans les 2 - 3 heures pour une dizaine de milliers de lignes de code (ce qui correspond à un petit jeu), ce qui n'est pas négligeable (encore que...). A vous de voir après si vous désirez changer.
Liens :
Page principale du wrapper (anglais)
Forum du wrapper (anglais)
Page SourceForge du wrapper (anglais)
j'ai tout lu
Mais par exemple, j'ai fait mon prog en C# avec ta dll sous windows, je veux la distribuer sous linux : je livre le .exe avec la dll? C'est mono qui s'occupe d'"émuler" l'éxecutable?
Idem sous linux, quand tu compiles sous mono, il te fait un .exe?
Sinon, il y a pas de chm?
Hors ligne
Oui, Mono lit et compile des executables car le CLI (si c'est le bon nom, j'ai oublié) stipule que l'extensions des exécutables .NET sont des ".exe" (cependant différents des .exe de Windows qui sont juste des fichiers binaires).
Pas de CHM, non, je n'ai pas trouvé de bon logiciel pour en générer et de toute façon, le chm ne marche pas sur mon Linux. Mais il y a un .xml qui s'associe à la référence .NET et qui ajoute des commentaires à l'IntelliSense de VIsual Studio et au code-completion de MonoDevelop. Donc en gros tu as l'aide quand tu code.
Dernière modification par DeusXL (28-10-2006 15:50:56)
Hors ligne
Moi aussi j'ai tout lu ! Et je vais regarder ta doc à propos des sceneNodes que tu as rajouté ça m'intéresse ;-)
Hors ligne
moi aussi j'ai tout lu (même deux fois) et juste un petite question :
avec mon programme je dois joindre quoi comme dll?
Hors ligne
soit tu télécharge la Release 0.5 sur le site de sourceforge et là tu as le choix entre deux packages :
-Dlls Only : ne contient que ce qu'il te faut pour développer.
-SDK : contient le code source et les exemples en plus.
Dans les deux cas il te faut ajouter comme référence Irrlicht.NET.dll.
Si tu utilise le SVN, il te faudra d'abord recompiler la solution Irrlicht.NET et utiliser la dll "Irrlicht.NET.dll".
Ensuite, si tu veux utiliser les extensions, ajoute "Irrlicht.Extensions.dll" (uniquement sur le SVN pour l'instant).
Pour que ton programme marche il faudra copier les fichiers "IrrlichtW.dll" et "Irrlicht.dll" pour Windows et "IrrlichtW.so" pour Linux à l'endroit où est créée ton application (généralement /bin/Debug et /bin/Release à partir du dossier de ton projet).
Pour faire court :
Dlls .NET (à ajouter comme références) : Irrlicht.NET.dll, Irrlicht.Extensions.dll.
Dlls natives (à copier coller dans le dossier de ton application) : IrrlichtW.dll, Irrlicht.dll, IrrlichtW.so
Dernière modification par DeusXL (01-10-2006 22:45:59)
Hors ligne
salut,
je ne trouve pas les methodes getSceneNodeFromId et getSceneNodeFromName dans SceneManager de Irrlicht.NET CP. Sont elles dans le wrapper ?
merci
Hors ligne
Elles y sont bien sûr et contrairement à Irrlicht .NET normal, elles ne sont pas buggées.
EDIT : Par contre ça serait plus approprié dans un post dans la section d'aide... Ici c'est une présentation
Dernière modification par DeusXL (01-11-2006 00:00:08)
Hors ligne
Pages: 1