Aller au menu - Aller au contenu

[Plan du site] Vous êtes ici --- > Le Site du Zéro > Les forums > Programmation > Langage C > FAQs bibliothèques tierces > Lecture du sujet

FAQs bibliothèques tierces

SDL / OpenGL / GTK+

Vous devez être inscrit pour pouvoir poster des messages

Page : Précédente  1  2 
Auteur Message
1 visiteur sur ce sujet (1 anonyme)
Page : Précédente  1  2 
Hors ligne Yno # Posté le 13/06/2007 à 01:01:34
SCE
Avatar
Groupe : Membres
Reprise du dernier message de la page précédente :
[OpenGL][11] Comment afficher des images 2D par dessus un rendu 3D ?

Il est bien sûr possible de dessiner sur l'écran en "mode 2D" comme avec la SDL, après un rendu 3D, pour afficher des informations comme le nombre de vies restantes, etc...

Pour cela, il vous faut reconfigurer votre matrice de projection en perspective cavalière, ou mode "ortho", puis dessiner les objets (généralement munis de textures pour obtenir un plus joli rendu) qui devront être rendus "à plat" sur l'écran.

La théorie de la technique est la suivante :

  1. initialisez vos matrices comme bon vous semble pour la projection de vos objets 3D dans la scène ;
  2. dessinez vos objets 3D, sans oublier d'emballer le tout dans de jolis glPush/PopMatrix() ;
  3. configurez la matrice de projection en mode "ortho" ;
  4. dessinez vos informations 2D, en utilisant par exemple de simples GL_QUADS (carrés) texturés.

Et en pratique, ça donne ça :

Code : C
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
/* etape 1 */
glMatrixMode(GL_PROJECTION);
gluPerspective(70.0, (float)W / H, 0.1, 1000.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
 
/* etape 2 */
glPushMatrix();
dessinerScene();
glPopMatrix();
 
/* etape 3 */
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(0, W, 0, H);
glMatrixMode(GL_MODELVIEW);
 
/* etape 4 */
glPushMatrix();
dessinerInfos();
glPopMatrix();

On suppose ici que W et H sont, respectivement, la largeur et la hauteur de votre fenêtre de rendu.
Édité le 03/05/2008 à 17:46:51 par Yno
Hors ligne Ismus # Posté le 13/06/2007 à 22:05:03
J'aime le sang :p
Avatar
Groupe : Membres
[OpenGL][12] Peut-on placer une vidéo dans une texture ?

Placer une vidéo dans une texture est une tâche possible mais difficile.
De plus, elle est dépendante du système d'exploitation.
De ce fait, OpenGL ne fournit aucune fonctionnalité pour effectuer cette tâche.

Voici un lien vers un tutorial expliquant comment faire sous Windows :
Édité le 13/06/2007 à 22:07:16 par Ismus
Hors ligne GuilOooo # Posté le 15/06/2007 à 17:53:41
PriPrOTtTt§!!!§
Avatar
Groupe : Membres
[SDL][7] Pourquoi SDL_FillRect porte ce nom ? Pourquoi son deuxième paramètre est-il toujours NULL ?

Comme pour SDL_BlitSurface, le deuxième paramètre de cette fonction n'est pas toujours NULL. S'il l'est, alors elle colorie toute la surface que vous lui avez passé avec une couleur donnée.
Mais on peut aussi lui passer un pointeur d'SDL_Rect. Un SDL_Rect contient les coordonnées d'un rectangle (x,y pour les coordonées du point supérieur gauche, et w,h pour les dimensions de la figure). Si vous passez un pointeur sur un rectangle à SDL_FillRect, alors seule la partie contenue dans ce rectangle va être coloriée.
Cette astuce peut éviter d'utiliser plein de SDL_Surface pour rien : vous pouvez directement colorier certaines parties de l'écran à coups de SDL_Rect maintenant.

Vous comprenez aussi pourquoi elle s'appelle FillRect : Fill, en Anglais, veut dire «remplir». Du coup, son nom serait, en français : SDL_Remplir_Rectangle. Nom qui peut paraître étrange quand on s'en sert uniquement sur des surface entières (comme dans le cours), mais pas quand on comprend entièrement comment on s'en sert (comme vous maintenant :) ).

T'as pas un exemple ?

Bien sûr. Imaginons ceci :

Code : C

/* Je vous passe les initialisations */

/* Ici, on crée un rectangle situé en position (0, 50),
qui fait 100px de large pour 150 de haut. Nous allons
afficher ce rectangle en vert sur fond jaune. */

SDL_Rect rct;
rct.x = 0;
rct.y = 50;
rct.w = 100;
rct.h = 150;

/* ... */

while(continuer)
{
    switch(event.type)
    {
        /* ... */
    }

    /* On remplit tout l'écran de jaune : 2e paramètre à NULL */
    SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 255, 255, 0));

    /* Après, on remplit toute la partie située dans notre rectangle en vert */.
    SDL_FillRect(ecran, &rct, SDL_MapRGB(ecran->format, 0, 255, 0));

    /* Et un petit SDL_Flip */
    SDL_Flip(ecran);
}

/* ... */


Concrètement on aura ça : (J'ai ajouté là légende en rouge pour que vous voyez à quoi correspond chaque chiffre)


Schema SDL_FillRect


Faites des expériences pour bien comprendre le principe !

Merci à Yno pour ses suggestions.
Édité le 22/06/2007 à 12:53:51 par GuilOooo
Hors ligne Yno # Posté le 15/06/2007 à 20:02:12
SCE
Avatar
Groupe : Membres
[SDL][8] Pourquoi utiliser la forme while(SDL_PollEvent()) ? ou pourquoi mes événements sont récupérés en retard ?

Si vous envoyez une suite d'événements rapidement à votre application, et que celle-ci réagi en retard, alors c'est que la file d'événements n'est pas vidée à chaque tour de votre boucle principale.
Ce qui signifie ?
A chaque fois que vous envoyez un événement à votre application SDL, celle-ci l'empile dans une file d'événements en attente d'être récupérés. Il vous est possible de lire dans cette file avec la fonction SDL_PollEvent(). Si un événement se trouvait dans la file, cette fonction renvoie un entier qui vaut 1 (true), 0 (false) sinon. Si vous ne videz pas cette file à chaque tour de boucle en n'interprêtant à chaque fois qu'un seul événement, elle se remplira et les derniers événements ne seront lu que bien après.
Pourquoi c'est lent ?
Car avant de pouvoir récupérer le 50ème événement par exemple, il faudra attendre que vote boucle principale s'exécute 50 fois. En supposant qu'un tour s'exécute en 20ms, il faudra attendre 20*50 = 1000ms, soit une seconde avant de pouvoir récupérer le 50ème événement. En une seconde, il peut se passer bien des choses, comme par exemple 100 nouveaux événements dans la file...
Que faire ?
Il faut se servir de la valeur de retour de SDL_PollEvent(), et récupérer tous les événements de la file à chaque tour de boucle. Pour cela, nous faisons simplement comme ceci :
Code : C
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
while(mainloop)
{
    /* tant qu'il y a un evenement dans la pile... */
    while(SDL_PollEvent(&ev))
    {
        /* on le lit et l'analyse... */
        /* ici, on ne s'occupera QUE des evenements */
    }
    
    /* et ici vous pourrez dessiner
       et faire tout ce que vous voudrez */

}
Édité le 30/07/2008 à 20:09:15 par Yno
Hors ligne Nab # Posté le 03/07/2008 à 15:36:09
KISS
Avatar
Groupe : Membres
[GTK+][5] À quoi sert le quatrième paramètre de g_signal_connect() et comment l'utiliser ?

Le quatrième paramètre de g_signal_connect() sert à passer des données personnelles au callback passé en troisième argument.
Ce paramètre est un pointeur qui va être transmit comme dernier argument au callback.

Attention, le pointeur en question est passé en dernier argument, cela ne veux pas forcément dire deuxième. Certains callbacks ont trois, voire plus d'arguments. Référez-vous à la documentation du signal que vous connectez pour en connaître le prototype.
Hors ligne jaco3th # Posté le 03/08/2008 à 08:26:45
Groupe : Membres
question effacée :-°
en tout cas merci pour ce topic ^^ (SDL)
Édité le 03/08/2008 à 09:03:31 par jaco3th
Hors ligne Zomb0 # Posté le 09/08/2008 à 14:13:41
I can, I must, I will
Avatar
Groupe : Membres
[GTK+] [6] Où trouver la documentation de référence pour GTK+ ?

Pour l'installation de GTK+, et la gestion des signaux, je conseille le tutoriel du site du zéro.

Et pour les widgets, un très bon tuto sur developpez.com.
Édité le 09/08/2008 à 14:19:23 par Zomb0
Hors ligne Nab # Posté le 09/08/2008 à 14:42:48
KISS
Avatar
Groupe : Membres
Citation : Zomb0
[GTK+] [6] Où trouver la documentation de référence pour GTK+ ?
[…]


Il serait bon avec un titre comme ça de fournir les lien vers la documentation de référence justement :

Et même peut-être l'ensemble des documentation présente sur library.gnome.org, qui contient entre autres GTK+, GDK, GDK-Pixbuf, GLib, GObject cités ci-dessus, mais aussi ATK, GIO, Pango, GConf… : http://library.gnome.org/devel/references

Image utilisateurGNU/Image utilisateurLinux - Image utilisateurDebian - Image utilisateurGNOME - Image utilisateurGTK+ - C - BaSH - Image utilisateurPython - Image utilisateur GIMP - Image utilisateur Blender

Ma bannière est inspirée de celle de iKs. D'ailleurs, si ça te dérange fais-le moi savoir, j'en changerai.
 
Hors ligne Ismus # Posté le 19/09/2008 à 21:24:28
J'aime le sang :p
Avatar
Groupe : Membres
[GTK+][7] Existe-t-il un logiciel de conception d'interface GTK+ ?

Oui. Ce logiciel se nomme Glade. (Interface de Glade)
Il prend en charge toute la partie de gestion/génération de l'interface. Les anciennes versions de Glade (2.x) permettaient de générer directement le code en C.
Cependant, depuis la version 3, cette fonctionnalité a été supprimée pour différentes raisons.

Glade enregistre les interfaces graphiques en générant des fichiers XML. La bibliothèque libglade permet de lire ces fichiers dynamiquement.
Grâce à libglade, ces fichiers XML peuvent être utilisés par de nombreux langages de programmation tels que C, C++, Java, Perl, Python, C#, PHP (extension PHP-GTK), Pike, Ruby, Haskell, Objective Caml et Scheme.

Quelques liens utiles :

Édité le 19/09/2008 à 22:11:59 par Ismus
Hors ligne tat # Posté le 09/11/2008 à 23:33:07
Avatar
Groupe : Membres
J'arrive pas à télécharger SDL_image! :( il me semble que le lien http://www.libsdl.org/projects/SDL_ima [...] 1.2.6-VC8.zip n'est plus valide!! Que dois-je faire?
Édité le 10/11/2008 à 19:34:12 par tat
Hors ligne GuilOooo # Posté le 10/11/2008 à 19:08:48
PriPrOTtTt§!!!§
Avatar
Groupe : Membres
Ce lien fonctionne très bien chez moi...

Tu n'as pas posté la réponse à ta question. Dans ce topic, on poste uniquement les questions posées les plus fréquemment sur le forum avec leurs réponse, pour éviter d'avoir à répéter souvent la même chose.

Ma série d'articles « Paradigmes » :
Intro - Impératif - Objets I
 

Retour au forum "Langage C" ou à la liste des forums

Vous devez être inscrit pour pouvoir poster des messages

Changer de design | En savoir plus | Plan du site | Politique d'accessibilité | Règles | RSS tutoriels | RSS news
Édité par Simple IT SARL : Nous contacter | Notre blog | Revue de presse | Publicité

Y'a plus rien à lire, faut remonter maintenant !

Hébergement web - Correction de tutoriels - Créer un site
Vous souhaitez apparaître ici ? Contactez-nous.

Nombre de connectés 98 Zéros connectés | Requêtes SQL 7 requêtes | Temps de génération de la page : Total (SQL) 0.0708s (0.056s)