Programmation 2D et 3D

Bonjour,

J’ai fait un programme qui affiche des signaux (en 2D) avec Visual C++ 6 en utilisant des fonctions GDI. Ces fonctions ont l’avantage d’être simple et de permettre de faire rapidement quelque chose de potable mais l’affichage et affreusement lent… (Je dois afficher environ 20 - 25 images/secondes et je fais du double buffering pour éviter le scintillement, donc GDI c’est vraiment pas fait pour ça.)

Maintenant que j’ai un peu de temps, je souhaiterais abandonner GDI pour une autre API, et c’est là que vous intervenez!

Que me conseillez-vous? OpenGl, DirectX, autre chose?

J’ai ouï dire que c’était bien d’utiliser Direct3D et d’afficher toujours le même plan pour faire de la 2D car on bénéficiait de l’accélération matérielle de nos puissantes cartes graphiques hors de prix.

Je précise que je dessine des graphiques, il s’agit donc essentiellement d’affichage de lignes et de chiffres. Une API qui fait également la 3D serait bienvenue car j’envisage de passer mes nuits d’hiver sur une version 3D de la chose.

(Je ne cherche pas une classe déjà faite qui fait des graphiques, je veux juste une API)

Merci d’avance à ceux qui auront la grâce de prêter un oeil attentif à mon cas de geek désespéré par la lenteur helvétique de sa réalisation…

Je conseillerai plus OpenGL, c’est plus simple pour débuter ou faire des trucs pas trop compliqués et c’est pas dépendant de la plate-forme avec glut par exemple. Sinon, effectivement DirectX sera ton ami.

Merci Xentyr,

Ca a l’air pas mal du tout ce Glut, mais j’ai déjà l’interface utilisateur (j’utilise les MFC) et j’aimerais juste changer l’API qui fait l’affichage tout en gardant la structure que j’ai déjà faite. Il faudrait donc que je puisse afficher ça dans une classe dérivée de CDialog.

Est-ce qu’on peut vraiment faire de la 2D avec DirectX en “projetant” de la 3D? J’aimerais, pour des raisons évidentes d’affichage d’unités, controller exactement la portion d’écran que j’affiche. Par exemple je veux afficher -10 Volts à 10 Volts exactement sans problème d’arrondi ou autre dû à la 3D qui ferait que je n’arrive pas à “faire croire” que c’est de la 2D. Est-ce que quelqu’un a déjà essayé?

Sinon bah passe au C#, et fais du directx9 C’est assez bien fait et ce sont des appels natifs et tout (pas l’interface com pas belle qu’on utilisait en VB). Enfin opengl et VC6 ca marche aussi

Pour une intégration maximale dans Windows, je te conseillerai sans hésitation DirectX. Disons que ça s’intégre mieux dans ton schéma “MFC”, donc C++, de la chose. OpenGL est une API totalement en C, et GLUT est un amalgame de composants mis en vrac par dessus, pas forcément trés adaptés à la cohabitation avec les MFC.

Pour ce qui est de l’affichage 2D, ne t’en fais pas, Direct3D peut tout à fait te gérer un affichage 2D au pixel sans aucun problème. Il te suffit de désactiver le “bilinear filtering”, et de fournir tes triangles directement dans un format “projeté”, ce qui fait que Direct3D les considérera comme étant 2D.

Merci Glop, mais comme je l’ai dit, j’ai pas envie de tout réécrire! Cela dit, j’ai essayé C# et j’ai trouvé ça très cool. Je vais d’ailleurs essayer de m’y mettre un peu plus sérieusement à l’occase.

Merci tuo pour tes explications! Je vais donc me lâcher pour DirectX, surtout que j’essaie de faire du pur orienté objet même si j’ai encore des sales réflexes de C (ça se soigne?). Et c’est l’occasion pour moi d’essayer DirectX.

tuo, juste pour dire que OpenGL et DirectX, ça n’a pas vraiment à voir avec une intégration windows des MFC, hein, donc pas la peine de troller sur l’OpenGL. Pour ce qu’il a décrit je ne vois aucun avantage décisif, excepté si son appli est amenée à tourner sous Unix, et là, c’est pas DX qui ressort.

Bref j’ai utilisé OpenGL l’an dernier dans une appli robotique sous Windows VC6, avec MFC, STL… et comme disait GloP, il n’y avait AUCUN pépin d’intégration.

Par contre si c’est un projet perso, un transposage en C# avec donc logiquement du DX9, c’est vraiment à envisager.

Edit : cross-posting. OK alors vas-y, lance-toi dans DX ! Bonne chance pour ton projet !
Ce message a été édité par xentyr le 22/09/2003

Je suis décidément un incompris… Je n’ai absolument pas trollé, j’ai juste signalé, je cite :

[quote]Disons que ça s’intégre mieux dans ton schéma “MFC”, donc C++, de la chose.[/quote]OpenGL est en C, alors qu’il est en C++ et (comme il le précise aprés d’ailleurs), il essaie de s’y tenir. Dans cette optique, je lui proposais donc DirectX, qui lui est en C++ contrairement à OpenGL. Sans effectuer de jugement. Sans troller. Et comme il utilise les MFC, on peut facilement déduire qu’il n’a pas spécialement d’interet à porter son application sous autre chose que windows.

Donc avant de me sauter à la gorge, merci de prendre le temps de lire ce que j’écris… (pour info : j’ai aussi fais de l’OpenGL sous Windows & tout hein, je n’ai rien contre OpenGL, cf VIP 2, la démo).

Je ne te saute pas à la gorge (cf le smiley). C’est juste que d’une les remarques désobligeantes sur GLUT étaient un peu expéditives (on peut en faire d’autres du même acabit sur DX), et surtout surtout, je voyais pas trop ce qui importait dans le fait de faire un moteur 2D/3D en C++ en utilisant la librairie OpenGL qui a été programmée en C à l’origine. On ne fait que des appels. Ton archi reste OO (cf. un autre projet de l’an dernier sur un mini-moteur 3D en C++ toujours ET en OpenGL).

P.S.: Et arrête de prendre toutes mes remarques comme personnelles, aussi (cf. le coup de l’“incendiage” fictif dans l’autre thread où j’expliquais simplement les raisons de mon post, sans agressivité aucune).

Ce message a été édité par xentyr le 22/09/2003

Bon je pense que je vais en rester la, ce fut un plaisir de vous cotoyer sur ces forums, mais apparemment je ne dois pas avoir la bonne mentalité pour ce genre de choses, vu comme on déforme / amplifie tout ce que je peux dire.

Bref. Xentyr tu as raison. Zoomastigophore voulait une solution orientée objet, et désolé mais DirectX est orienté objet, OpenGL ne l’est pas, c’est un choix qui a été fait à l’époque, voila tout, rien de dramatique. Pout GLUT oui j’aurais pu trouver des mots plus flatteurs que ceux que j’ai employés…

Et pour ta remarque “arrete de le prendre personnel” mais euh, la je cite :

[quote]tuo, juste pour dire que OpenGL et DirectX, ça n’a pas vraiment à voir avec une intégration windows des MFC, hein, donc pas la peine de troller sur l’OpenGL.[/quote]c’est pas à moi que tu t’adresses la ? … Je ne comprends plus rien la
Ce message a été édité par tuo le 22/09/2003

[quote]Et pour ta remarque « arrete de le prendre personnel » mais euh, la je cite :

Ce message a été édité par xentyr le 22/09/2003

Heu cela dit t’es pas oblige du tout de tout reecrire (ouai moi je suis toujours au C#, directx, glut et tout vous vous debrouillez je connais pas assez mais arretez de vous chamailler dedieu!). Tu peux tres facilement reprendre ton code C++ que t’as deja ecrit et faire ta couche de presentation par dessus en C#, etc. Tu peux regarder par exemple comment ils ont pris le code de quake2, transforme en C++, puis en managed et ca marche tres bien. Enfin aucun besoin de tout reecrire. Tu peux meme faire du C++ managed directx si tu veux, mais bon quitte a faire…

[quote]Bref j’ai utilisé OpenGL l’an dernier dans une appli robotique sous Windows VC6, avec MFC, STL… et comme disait GloP, il n’y avait AUCUN pépin d’intégration.[/quote]Je suis content de voir que je ne suis pas le seul roboticien de la cafzone…

T’inquiètes pas Glop, je vais m’y mettre au C#, MAIS PAS POUR CE PROGRAMME BORDEL ! D’ailleurs quand j’avais essayé ce langage j’avais trouvé tellement cool d’avoir la transparence de la fenêtre directement dans les propriétés de la classe que je n’avais pu m’empêcher de programmer l’excellent HollowWindow.exe qui faisait disparaître une fenêtre dans un effet digne des tours les plus difficiles d’Andorra de “Ma sorcière bien-aimée” me mettant dans un état émmotionnel que seul le sex m’avait offert jusqu’alors.

(t’inquiètes, je suis conscient que ce n’est pas le seul avantage du C#!)