7
votes

Graphiques croisés 3D avec .NET

Je voudrais programmer une application .NET qui fournit un rendu 3D d'un monde animé. Je codage sur un PC sous Windows, mais beaucoup de mon public cible sera sur Linux.

Il y a un tas de cadres là-bas qui semblent utiles, classés dans le niveau haut et bas comme je peux:

bas niveau graphique

  • OpenTK
  • cadre Tao semble avoir été remplacé par OpenTK, et le site est hors-ligne de nos jours, si le site Mono a quelques informations
  • SDL

    Cadres de développement du jeu

    • Axiom3D
    • Mono.XNA
    • Horde3D
    • AgateLib
    • OgreDotNet semble avoir été remplacé par Axiom3D
    • irrlicht sonne bien, mais le . port NET n'a pas eu de commits depuis plus de deux ans

      Est-ce que ces non-candidats? Qu'avez-vous trouvé être la meilleure option et pourquoi? Je cherche des comparaisons révélatrices, et des recommandations pour / contre. Certains d'entre eux prétendent travailler comme substituts XNA. Est-ce que cela signifie littéralement vous pouvez déployer pour Win / Mac / Linux, ainsi que la Xbox? Y at-il un piège?

      Je ne suis pas encore familier avec les API OpenGL / DirectX / XNA pour les graphiques 3D. Certains sont-ils plus faciles que d'autres à travailler? Est-ce que vous perdez toute flexibilité / puissance / performance due à des niveaux d'abstraction plus élevés?

      Notez que j'ai pas accès à une machine Linux pour un mois, donc je ne serai pas en mesure de tester mon développement sur Linux (d'où cette question).

      EDIT Je trouve Voici un article de synthèse avec des critiques utilisateur. Mais jusqu'à présent, les projets de documentation débutant et de l'échantillon sont très difficiles à faire usage de. Didacticiels toutes les références différentes versions de l'API, et ils vous recommandons d'utiliser toutes les différentes classes de base (non compris dans l'API) pour commencer. Certainement pas conçu avec le Pit de succès à l'esprit, mais toujours prometteur.


0 commentaires

4 Réponses :


7
votes

Peut-être pas tout à fait ce que vous recherchez, mais unity3d est un environnement de jeu 3D de plate-forme cross basé sur Mono, ce qui signifie que vous pouvez coder les bits dont vous avez besoin dans C #. Il existe des versions indie et pro avec la version indépendante libérée. http://unity3d.com/


11 commentaires

Avez-vous travaillé avec cela avant? Avez-vous un raisonnement à votre réponse? Qu'est-ce que cette API offre sur les autres répertoriées?


J'ai marqué avec ça. La chose est de ne pas obtenir l'unité confondue avec d'autres API de code. Ceci est un environnement de création de jeu complet, qui se trouve tout simplement sur mono. Pas la même chose qu'une API que vous utiliseriez dans votre propre code.


Par Environnement Voulez-vous entendre des outils de création et d'exécution? Est-ce quelque chose qui est en fait utile pour moi, car j'ai déjà tous les modèles et la structure, j'ai juste besoin de le rendre en quelque sorte?


Oui je veux dire exactement ça. Allez télécharger vous-même une copie, la version indépendante est gratuite, vous n'avez donc rien à perdre.


Bummer Bien que des plateformes transversales ici signifie ici «Mac et Windows».


Ou basé sur le navigateur, ou si vous souhaitez soulever de l'argent si vous êtes plus sérieux à ce sujet, le même jeu peut également être construit pour iPhone, Android, et si vous êtes vraiment sérieux, Wii.


Je ne fais pas de jeu. C'est une visualisation pour une simulation qui a actuellement des utilisateurs majoritaires sur Linux, mais je suis le plus fort en développement pour Windows / .NET, donc cette question.


Je crains que l'unité ne supporte pas Linux, ce n'est pas une option. Dommage parce que ça a l'air génial - je suppose que vous obtenez ce que vous payez. Dommage aussi parce que votre réponse très votée fait ressembler à l'affaire est fermée sur cette question!


Comment est-ce que celui-ci est basé sur Mono, mais conçu hors d'être exécuté sous Linux?


Ouais, comme je l'ai dit, ce n'est peut-être pas ce que vous cherchez. C'est un outil de craquage, mais ne convient pas à votre facture cette fois-ci.


@ H2G2JAVA, la partie mono est vraiment uniquement le moteur de configuration, c'est-à-dire comment vous pouvez brancher votre propre code. Le noyau graphique est tout C ++. Et le framework Unity.NET montre des signes clairs de nombreuses méthodes qui piquent directement dans un backend C ++.



2
votes

J'aurais deuxièmes l'idée de regarder l'unité, que si je me souviens bien d'utiliser c # comme une langue de script pour vous permettre d'écrire le code de jeu (à l'aide de mono), ce qui permet au moteur de rendu réel et ainsi de suite à utiliser le code natif ( probablement c ++).

Sinon, je me méfierais d'utiliser mono pour quelque chose comme des graphismes 3D ou d'autres utilisations de «Hard Core» ... tout ce qui implique une interface graphique ou un rendu, je serais nerveux. Mais c'est mon choix personnel, si vous avez le temps de passer la recherche de la recherche, il peut être intéressant de lancer un prototype ensemble ... mais je n'écrirais pas beaucoup de code C # sans la possibilité de le tester sur Linux très tôt au cas où il y a de grandes Problèmes.


7 commentaires

Accepter. La dernière fois que j'ai vérifié mono avait beaucoup de rattraper la version Windows et avait beaucoup de fonctionnalités manquantes. Nasa World Wind était une jolie application 3D écrite en C # mais depuis la gestion de DirectX a été tuée, je suppose qu'ils sont passés à Java et Jogl. en.wikipedia.org/wiki/nasa_world_wind


@John: Qu'est-ce que l'unité me donne sur un wrapper directement opengl telle que Opentk? Et je pense que vous avez raison - je vais trouver une façon de tester une version précoce sur diverses plates-formes dès que possible.


En écart, Mono a des éléments de «noyau durs» que MS CLR n'a pas. Par exemple, SIMD SUPPORT. Je pense que Mono est capable de courir des choses complexes, mais cela pourrait prendre plus de travail car il a obtenu des bords plus rugueux que vous ne pouviez vous attendre sur Win / MS CLR.


@Trew - Unity est un moteur de jeu complet (ou partiel) comme je le comprends. Donc, beaucoup de choses supplémentaires, des choses communes que vous pouvez réutiliser comme le chargement des ressources et des trucs (je ne suis pas un expert). Il possède également des options de déploiement de navigateur.


Par cœur dur, je veux dire plus comme tout ce qui n'est pas le noyau central, comme l'interface graphique. Pour une application serveur, Mono est probablement très stable, mais je ne sais pas quelles parties il soutient au-delà de cela. Personnellement, la plate-forme C # serait géniale, je l'aime comme une langue.


Malheureusement, l'unité ne prend pas en charge Linux, donc ce n'est pas une option pour moi. Avez-vous d'autres suggestions?


Êtes-vous certain que le déploiement Web ne fonctionne pas sur Linux? Sinon, je ne reviendrais pas à mon "N'utilisez pas de .NET pour les jeux croisés".



1
votes

Vous pouvez envisager d'utiliser QT et OpenGL. J'imagine cependant que OpenGL est probablement trop bas niveau (lire: "Inutile de complexe") pour vos besoins particuliers.


6 commentaires

Opentk semble être une enveloppe sensible pour OpenGL, mais je ne suis pas clair sur quels types de choses fournissent des API de niveau supérieur. Ou a posé une autre manière, qu'est-ce qui rend le niveau de qualité openGL?


Avec OpenGL, vous traitez de votre scène au niveau des sommets individuels et des transformations matricielles. D'autres bibliothèques fournissent une couche d'abstraction plus élevée, supprimant la nécessité de comprendre de nombreuses constructions et concepts de base 3D.


Eh bien, quelques jours maintenant, j'ai un meilleur gérant sur OpenGL et, bien que je suis content d'avoir passé le temps à l'apprendre, je pense que je vais avoir plus de développement pour mon argent si j'utilise une bibliothèque. Principalement, je veux que des textures qui se dégradent soient bien avec différents niveaux de support matérielle et des ombres. Tout ce que j'ai vu sur des ombres jusqu'à présent, c'est d'accord en théorie, mais devient difficile dans la pratique. Recommanderiez-vous des cadres de niveau supérieur qui fonctionnent sur OpenGL?


Le support OpenGL sur Windows est également un peu dodgy. Le SDK fourni avec Visual Studio est OpenGL 1.1 publié en 1996! Vous pouvez vous déplacer, mais tout rend plus complexe - GameDev.net/Reference/Articles/ Article1929.asp


@NICK: Soutien récent pour OpenGL est pourquoi j'ai recommandé Qt (ignorer complètement la préférence de OP pour une application .NET). @Drew: J'ai bien peur de ne pas avoir eu beaucoup d'interaction avec des bibliothèques de niveau supérieur. J'ai entendu de bonnes choses sur Xna et Ogre, cependant.


Bravo @TreDubzed, je joue avec Opentk (un wrapper .Net pour OpenGL) et Axiom3D (un port natif .Net d'Ogre) qui semble super cependant un petit crufty. Vos commentaires sont encourageants.



3
votes

Utilisez OPENTK

  • c'est opengl C'est la plate-forme indépendant. Il est fortement typé

4 commentaires

Je cours avec Opentk pour l'instant. Semble bien. L'avez-vous utilisé ou avez-vous obtenu cette balle de balle en ligne? Intéressé d'entendre comment les autres ont eu avec elle. C'est assez bas niveau (qui est le point) et mendier des abstractions de niveau supérieur à faire pour l'amour de la productivité. Cependant, la bonne abstraction dépend de ce que vous faites et jusqu'à présent, je n'ai trouvé aucun ce qui convient ce que je fais.


Je ne l'ai pas eu en ligne. Je l'utilise maintenant pour un projet de passe-temps. J'ai passé un moment depuis que je suis OpenGL et Opentk était une surprise rafraîchissante d'utiliser. La pointe forte est vraiment une explosion. Et oui, vous êtes à peu près vous-même quand il s'agit de créer le "moteur". Si vous allez sur le site Opentk, il y a des sections de blogs où les gemmes se présentent à l'occasion.


Jusqu'à présent, j'aime Opentk, mais c'est un niveau assez bas. La communauté sur Opentk.com est aussi grande. Ont cherché un peu à Axiom3d aussi. Quelques exemples de bons exemples. Toute raison pour laquelle vous ne vous êtes pas allé pour un système de niveau supérieur?


J'ai étudié OpenGL quelques années de retour, je veux apprendre à connaître la nouvelle version.