Commant afficher une image en 2D? [c++/Ogl] - Programmation
Marsh Posté le 24-06-2001 à 15:39:00
tu viens de mettre le doigt sur un problème de OpenGL, c'est qu'il n'est pas vraiment cool pour la 2D (surtout que sur les cartes non pro, y'a pas les imaging extensions).
DrawPixels est la solution la plus directe pour afficher des données qui changent souvent, genre chaque frame, et sont petites (genre du texte)
Copier sur une texture et afficher, c'est clair qu'il faut pas y toucher trop souvent, car le format interne est prfois le résultat d'une traduction du format visible, ce que rend OpenGL aussi peu efficace pour jongler avec les textures.
Mais quand il faut redimensionner, étirer, etc, c'est mieux que glDrawPixels.
Pour le raster pos, même si tu changes l'origine des coordonnées, tu buteras toujours contre le problème de la fenêtre aux cordonnées bizarre, mais en étant propre, tou se gère assez faclement.
sinon c'est glu32.dll qu'il faut trouver pour glu. Un chti google.
Enfin, nvidia, pour promouvoir ses cartes, fait du support développeur, et tu trouveras sur leur site, les .h et tout et tout.
Marsh Posté le 24-06-2001 à 19:49:53
Merci mon petit Jano.
Mais pour faire de la 2D il faut quel API?
Pas OpenGL apparement.
DirectX8?(mmmmmmmmmoooooouaaaaaaarrrffffffff!) encore pire.
DirectX 7?
Je comprends plus rien.
Les cartes permettent de faire de la 3D en hardware donc on a pu le droit de faire de la 2D?
Marsh Posté le 24-06-2001 à 20:14:06
DirectDraw de DirectX.
C'est pas compliqué, si tu veux les tutorials Microsoft downloades la version DirectX 7 SDK car dans le 8 ils ne sont plus présents.
Enfait DirectDraw utilise directement la carte graphique, t'as pas besoin de t'embeter.
Marsh Posté le 25-06-2001 à 11:33:55
Ca marche encore DirectDraw ds DirectX8.
Je croyais qu'il avait garde DirectDraw juste pour la compatibite. Kesk'ils voulaient qu'on utilise alors?
Marsh Posté le 25-06-2001 à 11:48:18
pour afficher une image 'en 2d', tu passes généralement par un polygone.
de mémoire, sous dx, tu peux passer directement les coordonnées écran (x, y, z, w) avec les matrices world, view, proj à l'identité. il faut que tes coordonnées x, y soient déjà transformées pour le répère du viewport (ie 0..taille du viewport ou -tailleviewport/2 ... tailleviewport/2, me souviens plus).
le mieux (je trouve) est de ne pas zigouiller les matrices view & proj déjà setupées et donc de passer des coordonnées caméra.
donc coordonneesEcranCamera = coordonnesEcran * View.GetInverse()
et du coup, tu spécifies les coordonnées (x, y) dans le repère homogène ( x de -1 à 1, pareil pour y).
///
pour afficher du texte, il y a déjà des fonctions présentes sous DX.
sinon tu peux y aller à fond à fond à fond et faire un polygone par lettre, comme dans quake ou zelda 64
Marsh Posté le 24-06-2001 à 15:21:31
Encore une question sur openGL!
C'est sur un point qu'est moins documente que les autres car c'est de la 2D.
Je veux afficher une simple image en 2D. Je me sers donc de glDrawPixels().Mais l'image apparait a milieu de l'ecran.
Je change donc la position du raster avec glRasterPos(). Mais c'est po trop pratique.Pour mettre l'image en bas a gauche, la position du raster doit etre ( 1.1, -0.8). C'est pas genial pour mettre precisement l'image ou on veut!
Y'a pas un autre moyen pour afficher des images en 2D?Comment faites vous?Vous mappez une face avec une texture?
2eme question : quelle est la derniere version des fichiers .h, .lib et .dll d'Ogl et ou les trouver(j'ai rien vu sur www.opengl.org).Paske j'ai pas la fonction gluBuild2DMipmap()!