begin process at 2012 05 27 18:40:30
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

OpenGL

 > METEROID IV // JEU SOUS OPENGL (DEVC++)

METEROID IV // JEU SOUS OPENGL (DEVC++)


 Information sur la source

Note :
7 / 10 - par 2 personnes
7,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :OpenGL Niveau :Débutant Date de création :18/06/2004 Date de mise à jour :30/06/2004 12:41:08 Vu / téléchargé :4 676 / 364

Auteur : kenjimax

Ecrire un message privé
Ce membre participe au partage de revenus publicitaires
Commentaire sur cette source (31)
Ajouter un commentaire et/ou une note


 Description

Cliquez pour voir la capture en taille normale
C'est le debut d'un jeu en openGL mettant en scene un petit vaisseau créé sous paint (si si pour HL² ils ont fait pareil :D )

Le defilement de l'espace vient d'etre fini ainsi que le tir du vaisseau... Il manque le plus difficile a faire, a savoir l'implementation des ennemis et d'une IA a peu pres correcte.

Apres, il faudra que je rajoute du son et un petit scenario (exemple : une voix de general bien grave qui dirait : "Voila, mon p'tit ! C'est votre premiere mission ! Dans not' maison, y a pas de froussard, ceux qui deguerpissent j'leur #"%ù£ le derriere, c'est compri ???...etc."

J'attends vos commentaires !

Source

  • LRESULT CALLBACK WndProc (HWND hWnd, UINT message,
  • WPARAM wParam, LPARAM lParam);
  • void EnableOpenGL (HWND hWnd, HDC *hDC, HGLRC *hRC);
  • void DisableOpenGL (HWND hWnd, HDC hDC, HGLRC hRC);
  • int vaisseau, tir_rouge;
  • /**************************
  • * WinMain
  • *
  • **************************/
  • int WINAPI
  • WinMain (HINSTANCE hInstance,
  • HINSTANCE hPrevInstance,
  • LPSTR lpCmdLine,
  • int iCmdShow)
  • {
  • WNDCLASS wc;
  • HWND hWnd;
  • HDC hDC;
  • HGLRC hRC;
  • MSG msg;
  • BOOL bQuit = FALSE;
  • /* register window class */
  • wc.style = CS_OWNDC;
  • wc.lpfnWndProc = WndProc;
  • wc.cbClsExtra = 0;
  • wc.cbWndExtra = 0;
  • wc.hInstance = hInstance;
  • wc.hIcon = LoadIcon (NULL, IDI_APPLICATION);
  • wc.hCursor = LoadCursor (NULL, IDC_ARROW);
  • wc.hbrBackground = (HBRUSH) GetStockObject (BLACK_BRUSH);
  • wc.lpszMenuName = NULL;
  • wc.lpszClassName = "GLSample";
  • RegisterClass (&wc);
  • /* create main window */
  • hWnd = CreateWindow (
  • "GLSample", "OpenGL Sample",
  • WS_CAPTION | WS_POPUPWINDOW | WS_VISIBLE,
  • 0, 0, 256, 256,
  • NULL, NULL, hInstance, NULL);
  • /* enable OpenGL for the window */
  • EnableOpenGL (hWnd, &hDC, &hRC);
  • glEnable(GL_TEXTURE_2D);
  • glEnable(GL_BLEND);
  • loadTGA("textures/vaisseau.tga", vaisseau);
  • loadTGA("textures/tir_rouge.tga", tir_rouge);
  • /* program main loop */
  • while (!bQuit)
  • {
  • /* check for messages */
  • if (PeekMessage (&msg, NULL, 0, 0, PM_REMOVE))
  • {
  • /* handle or dispatch messages */
  • if (msg.message == WM_QUIT)
  • {
  • bQuit = TRUE;
  • }
  • else
  • {
  • TranslateMessage (&msg);
  • DispatchMessage (&msg);
  • }
  • }
  • else
  • {
  • /* OpenGL animation code goes here */
  • glClearColor (0.0f, 0.0f, 0.0f, 0.0f);
  • glClear (GL_COLOR_BUFFER_BIT);
  • glPushMatrix ();
  • glBegin (GL_TRIANGLES);
  • glBindTexture(GL_TEXTURE_2D, vaisseau);
  • glTexCoord2f (1.0f, 0.0f); glVertex2f (0.0f, 1.0f);
  • glTexCoord2f (0.0f, 1.0f); glVertex2f (0.87f, -0.5f);
  • glTexCoord2f (0.0f, 0.0f); glVertex2f (-0.87f, -0.5f);
  • glEnd ();
  • glPopMatrix ();
  • SwapBuffers (hDC);
  • Sleep (1);
  • }
  • }
  • /* shutdown OpenGL */
  • DisableOpenGL (hWnd, hDC, hRC);
  • /* destroy the window explicitly */
  • DestroyWindow (hWnd);
  • return msg.wParam;
  • }
  • /********************
  • * Window Procedure
  • *
  • ********************/
  • LRESULT CALLBACK
  • WndProc (HWND hWnd, UINT message,
  • WPARAM wParam, LPARAM lParam)
  • {
  • switch (message)
  • {
  • case WM_CREATE:
  • return 0;
  • case WM_CLOSE:
  • PostQuitMessage (0);
  • return 0;
  • case WM_DESTROY:
  • return 0;
  • case WM_KEYDOWN:
  • switch (wParam)
  • {
  • case VK_ESCAPE:
  • PostQuitMessage(0);
  • return 0;
  • }
  • return 0;
  • default:
  • return DefWindowProc (hWnd, message, wParam, lParam);
  • }
  • }
  • /*******************
  • * Enable OpenGL
  • *
  • *******************/
  • void
  • EnableOpenGL (HWND hWnd, HDC *hDC, HGLRC *hRC)
  • {
  • PIXELFORMATDESCRIPTOR pfd;
  • int iFormat;
  • /* get the device context (DC) */
  • *hDC = GetDC (hWnd);
  • /* set the pixel format for the DC */
  • ZeroMemory (&pfd, sizeof (pfd));
  • pfd.nSize = sizeof (pfd);
  • pfd.nVersion = 1;
  • pfd.dwFlags = PFD_DRAW_TO_WINDOW |
  • PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER;
  • pfd.iPixelType = PFD_TYPE_RGBA;
  • pfd.cColorBits = 24;
  • pfd.cDepthBits = 16;
  • pfd.iLayerType = PFD_MAIN_PLANE;
  • iFormat = ChoosePixelFormat (*hDC, &pfd);
  • SetPixelFormat (*hDC, iFormat, &pfd);
  • /* create and enable the render context (RC) */
  • *hRC = wglCreateContext( *hDC );
  • wglMakeCurrent( *hDC, *hRC );
  • }
  • /******************
  • * Disable OpenGL
  • *
  • ******************/
  • void
  • DisableOpenGL (HWND hWnd, HDC hDC, HGLRC hRC)
  • {
  • wglMakeCurrent (NULL, NULL);
  • wglDeleteContext (hRC);
  • ReleaseDC (hWnd, hDC);
  • }
LRESULT CALLBACK WndProc (HWND hWnd, UINT message,
WPARAM wParam, LPARAM lParam);
void EnableOpenGL (HWND hWnd, HDC *hDC, HGLRC *hRC);
void DisableOpenGL (HWND hWnd, HDC hDC, HGLRC hRC);

int vaisseau, tir_rouge;

/**************************
 * WinMain
 *
 **************************/

int WINAPI 
WinMain (HINSTANCE hInstance,
         HINSTANCE hPrevInstance,
         LPSTR lpCmdLine,
         int iCmdShow)
{
    WNDCLASS wc;
    HWND hWnd;
    HDC hDC;
    HGLRC hRC;        
    MSG msg;
    BOOL bQuit = FALSE;

    /* register window class */
    wc.style = CS_OWNDC;
    wc.lpfnWndProc = WndProc;
    wc.cbClsExtra = 0;
    wc.cbWndExtra = 0;
    wc.hInstance = hInstance;
    wc.hIcon = LoadIcon (NULL, IDI_APPLICATION);
    wc.hCursor = LoadCursor (NULL, IDC_ARROW);
    wc.hbrBackground = (HBRUSH) GetStockObject (BLACK_BRUSH);
    wc.lpszMenuName = NULL;
    wc.lpszClassName = "GLSample";
    RegisterClass (&wc);

    /* create main window */
    hWnd = CreateWindow (
      "GLSample", "OpenGL Sample", 
      WS_CAPTION | WS_POPUPWINDOW | WS_VISIBLE,
      0, 0, 256, 256,
      NULL, NULL, hInstance, NULL);

    /* enable OpenGL for the window */
    EnableOpenGL (hWnd, &hDC, &hRC);
    
    glEnable(GL_TEXTURE_2D);
    glEnable(GL_BLEND);
    
    loadTGA("textures/vaisseau.tga", vaisseau);
    loadTGA("textures/tir_rouge.tga", tir_rouge);

    /* program main loop */
    while (!bQuit)
    {
        /* check for messages */
        if (PeekMessage (&msg, NULL, 0, 0, PM_REMOVE))
        {
            /* handle or dispatch messages */
            if (msg.message == WM_QUIT)
            {
                bQuit = TRUE;
            }
            else
            {
                TranslateMessage (&msg);
                DispatchMessage (&msg);
            }
        }
        else
        {
            /* OpenGL animation code goes here */

            glClearColor (0.0f, 0.0f, 0.0f, 0.0f);
            glClear (GL_COLOR_BUFFER_BIT);

            glPushMatrix ();
            glBegin (GL_TRIANGLES);
            glBindTexture(GL_TEXTURE_2D, vaisseau);
            glTexCoord2f (1.0f, 0.0f);   glVertex2f (0.0f, 1.0f);
            glTexCoord2f (0.0f, 1.0f);   glVertex2f (0.87f, -0.5f);
            glTexCoord2f (0.0f, 0.0f);   glVertex2f (-0.87f, -0.5f);
            glEnd ();
            glPopMatrix ();

            SwapBuffers (hDC);

            Sleep (1);
        }
    }

    /* shutdown OpenGL */
    DisableOpenGL (hWnd, hDC, hRC);

    /* destroy the window explicitly */
    DestroyWindow (hWnd);

    return msg.wParam;
}


/********************
 * Window Procedure
 *
 ********************/

LRESULT CALLBACK 
WndProc (HWND hWnd, UINT message,
         WPARAM wParam, LPARAM lParam)
{

    switch (message)
    {
    case WM_CREATE:
        return 0;
    case WM_CLOSE:
        PostQuitMessage (0);
        return 0;

    case WM_DESTROY:
        return 0;

    case WM_KEYDOWN:
        switch (wParam)
        {
        case VK_ESCAPE:
            PostQuitMessage(0);
            return 0;
        }
        return 0;

    default:
        return DefWindowProc (hWnd, message, wParam, lParam);
    }
}


/*******************
 * Enable OpenGL
 *
 *******************/

void
EnableOpenGL (HWND hWnd, HDC *hDC, HGLRC *hRC)
{
    PIXELFORMATDESCRIPTOR pfd;
    int iFormat;

    /* get the device context (DC) */
    *hDC = GetDC (hWnd);

    /* set the pixel format for the DC */
    ZeroMemory (&pfd, sizeof (pfd));
    pfd.nSize = sizeof (pfd);
    pfd.nVersion = 1;
    pfd.dwFlags = PFD_DRAW_TO_WINDOW | 
      PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER;
    pfd.iPixelType = PFD_TYPE_RGBA;
    pfd.cColorBits = 24;
    pfd.cDepthBits = 16;
    pfd.iLayerType = PFD_MAIN_PLANE;
    iFormat = ChoosePixelFormat (*hDC, &pfd);
    SetPixelFormat (*hDC, iFormat, &pfd);

    /* create and enable the render context (RC) */
    *hRC = wglCreateContext( *hDC );
    wglMakeCurrent( *hDC, *hRC );

}


/******************
 * Disable OpenGL
 *
 ******************/

void
DisableOpenGL (HWND hWnd, HDC hDC, HGLRC hRC)
{
    wglMakeCurrent (NULL, NULL);
    wglDeleteContext (hRC);
    ReleaseDC (hWnd, hDC);
}

 Conclusion

Comme toujours, UN GRAND MERCI A FUNTO !!!
J'ai abandonné la programmation depuis les vacances de l'annee derniere et c'est mon premier programme, je l'ai fait aujourd'hui, je suis dessus depuis 3 heures.
J'espere le finir...pas comme les deux autres (dragonote et meteroid III)

Voila ! Je remercie encore une fois FUNTO !!!

www.amk-project.fr.st (je crois que c'est ca... :D )

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !
  •   Meteroid IV
    • Image pas encore travaillé
    •   images
      • TEX_TIR_ROUGE.tgaTélécharger ce fichier [Réservé aux membres club]1 042 octets
      • TEX_UNIVERS.tgaTélécharger ce fichier [Réservé aux membres club]1 048 594 octets
      • TEX_VAISSEAU_JOUEUR.tgaTélécharger ce fichier [Réservé aux membres club]16 402 octets
    • Affichage.hTélécharger ce fichier [Réservé aux membres club]Voir ce fichier1 075 octets
    • Affichage.oTélécharger ce fichier [Réservé aux membres club]288 octets
    • Clavier.hTélécharger ce fichier [Réservé aux membres club]Voir ce fichier564 octets
    • Clavier.oTélécharger ce fichier [Réservé aux membres club]288 octets
    • glut32.dllTélécharger ce fichier [Réservé aux membres club]208 896 octets
    • Init.hTélécharger ce fichier [Réservé aux membres club]Voir ce fichier278 octets
    • Init.oTélécharger ce fichier [Réservé aux membres club]288 octets
    • main.cppTélécharger ce fichier [Réservé aux membres club]Voir ce fichier753 octets
    • main.oTélécharger ce fichier [Réservé aux membres club]9 429 octets
    • Makefile.winTélécharger ce fichier [Réservé aux membres club]754 octets
    • Meteroid IV.devTélécharger ce fichier [Réservé aux membres club]1 654 octets
    • Meteroid IV.exeTélécharger ce fichier [Réservé aux membres club]109 028 octets
    • Meteroid IV.layoutTélécharger ce fichier [Réservé aux membres club]665 octets
    • Outils.cppTélécharger ce fichier [Réservé aux membres club]Voir ce fichier1 654 octets
    • Outils.hTélécharger ce fichier [Réservé aux membres club]Voir ce fichier764 octets
    • Outils.layoutTélécharger ce fichier [Réservé aux membres club]664 octets
    • Outils.oTélécharger ce fichier [Réservé aux membres club]288 octets
    • Souris.hTélécharger ce fichier [Réservé aux membres club]Voir ce fichier743 octets
    • Souris.oTélécharger ce fichier [Réservé aux membres club]288 octets
    • tga.hTélécharger ce fichier [Réservé aux membres club]Voir ce fichier9 171 octets
    • Variables.hTélécharger ce fichier [Réservé aux membres club]Voir ce fichier221 octets

Télécharger le zip


 Sources du même auteur

Source avec Zip Source avec une capture OPENGL 2D SIMULATION MOUVEMENT BROWNIEN
Source avec une capture PGA : RPG EN C++/OPENGL
Source avec une capture FRACTALE(S) TPE (OPENGL // GLUT)
Source avec Zip CONVERTISSEUR "BEAUFORT, KM/H, M/S", ORIENTÉ OBJET, CONSOLE...
Source avec Zip Source avec une capture RPG ALLENDE // JEUX EN OPENGL (VERSION BETA 4)

 Sources de la même categorie

Source avec Zip Source avec une capture AFFICHER DES COURBES DE BEZIER par shorzy
Source avec Zip Source avec une capture BASE/MOTEUR 3D EN QT/OPENGL (COMPLET ET FONCTIONNEL!) POUR U... par envi33
Source avec Zip Source avec une capture CLASSE AVEC OPENGL - OBJETS 3D ET ANIMATIONS par rasta63
Source avec Zip Source avec une capture LETTRES 3D AVEC OPENGL ET QT par opossum_farceur
Source avec Zip CUBE 3D GLUT32 VC++ ET DEVC++ par bobby03

Commentaires et avis

Commentaire de neo_00110010101 le 19/06/2004 07:30:03

il faudrait que lorsqu'on laisse cliquer sur la souris, le vaisseau shoot sans relache tu vois ?
Sinon j'ai remarqué qu'il tire dès qu'on clique mais aussi dès qu'on relache. C'est original ^^
A part ça le scrolling est bien fait mais manque plus que des ennemis comme tu dis !

Commentaire de MoDDiB le 19/06/2004 09:59:05

...Et sincèrement les ennemis c'est pas trop ce qu'il y a de plus difficile :) le plus dur c'est de faier un gameplay intéressant :)

Commentaire de Saros le 19/06/2004 10:37:02

Le vaisseau pour du paint il est pas mal :b
Je le trouve bien le scrolling... Tu voudrais pas plutôt en faire un différentiel, avec plusieurs plans qui défilent à des vitesses différentes ? Ce serait génial...
Voilà, sinon bonne continuation

Commentaire de Funto66 le 19/06/2004 13:21:38

De rien de rien...c pas la peine de l'écrire 2 fois et en majuscules qd même lol
Plusieurs remarques :
-pas de timer, faudra en mettre un (jeu trop lent chez moi)
-plutôt que de tirer un seul projectile, ce qui nous empêche de re-tirer pendant que le seul projectile existant et en train d'avancer, il faudrait utiliser plusieurs projectiles à la fois, genre avec une classe Projectile utiliser un vector<Projectile>.
-pour les textures TGA, tu utilises le loader de Nate Miller donc les images ne peuvent pas être  du TGA compressé; avec un programme comme GIMP, tu pourrais enregistrer tes images au format TGA compressé et ensuite les charger avec un autre loader (genre le mien, sur CppFrance ;))
-à parler des textures, c'e qui n'est pas utile et qui bouffe de la place sur la carte graphique : la texture de l'univers. Pour dessiner des points blancs sur fond noir tu pourrais qd même le faire par toi-même lol, en utilisant la fonction rand() pour que les étoiles soient éparpillées au hasard par exemple.
-enfin, chez moi le vaisseau ne suit pas exactement la souris (il est un peu en retard) mais je vois pas comment l'arranger.

Bon, ben pour finir faudrait rajouter des ennemis bien sûr (et du son ;))
Bonne prog

Commentaire de kenjimax le 19/06/2004 14:27:42

Ahhh oui ! excuse moi funto....jamais deux sans trois !

MERCI FUNTO !

Ca y est, t'es content ? :D

OK, pour vos remarques, je m'y met tout de suite.

Commentaire de kenjimax le 19/06/2004 16:54:44

Bon... On peut maintenant lancer 3 "boules" en meme temps et leur vitesse est reglable...

Cependant, aux vues des modifications necessaires au programme, j'ai decidé (c'est pas la premiere fois d'ailleur) d'arreter (je vous l'avais bien dis).
Mais, je vais faire autre chose bien sur ! Le meme style de jeu mais orienté objet a la maniere de meteroid III mais en opengl.

J'aurai deux trois questions à poser a des "specialistes" (funto : "Moi, Moi, Moi, je sais !!! je sais moi !!!") en ce qui concerne la rapidité d'execution des jeux : a chaque fois que je fais un programme avec des textures, ca rame. Alors, je met un timer et je limite a 40 images par seconde par exemple, ca marche un temps, mais au fur et a mesure de la complexification du programme, ca ralenti, ralenti, ralenti.

Donc, j'aimerai avoir quelques conseil pour accelerer l'execution des jeux, exemple :
- Il ne faut pas que tu utilises trop de textures, par exemple ton univers tu aurais du le faire avec "glBegin(GL_POINTS)".
- Utilise un autre loader de texture plus rapide.
- documente toi sur les procedes d'optimisation du code.
- etc...

Merci d'avance !

Commentaire de MoDDiB le 19/06/2004 17:12:30

DirectX rien de mieux ca rame pas , tu fais ce que tu veux avec :)

Commentaire de Funto66 le 19/06/2004 17:20:48

Ouais, comme OpenGL quoi, mais en non portable :D
Bon, on va essayer d'éviter le débat ultra-classique et méga-trollesque "DirectX ou OpenGL?"...

kenjimax >> je vois pas pourquoi t'arrêtes, enfin bon...
Pour ce qui est des timers, en fait la méthode que tu utilises (et qui vient de moi, j'ai honte...) est mauvaise; plutôt que de limiter l'affichage à X FPS, les jeux actuels calculent le temps d'affichage de chaque frame et font les "actions" (déplacement d'un perso...etc) en fonction du temps passé à dessiner la frame. C'est pour ça qu'un jeu apparaît saccadé sur une vieille carte graphique, mais peut quand même rester relativement jouable.
Je sais pas si je suis vraiment clair...

Bon, ensuite c'est sûr que l'idée de la texture de l'univers était mauvaise lol.
Après, pour ce qui est d'accélérer le rendu (mais ça se sent pas vraiment dans un prog en 2D comme les tiens...), y'a les display lists et les vertex arrays.
Cherche un peu sur le net, j'ai ni le temps ni l'envie de l'expliquer là :p
Bonne prog
++

Commentaire de MoDDiB le 19/06/2004 19:25:15

Pour le timer il te faut 2 variable double et la fonction timeGetTime de je sais plus quel fichier..(windows.h pitetre)
tu trouve donc ta nouvelle position en multipliant le temps écoulé depuis le dernier passage: si ce n'est pas assez clair dis le je rééxpliquerai bien !

Commentaire de Wett le 21/06/2004 02:03:08

Sympatoche comme programme ! Dommage que tu l'arretes, franchement y'a moyen d'en faire qlq chose de marrant
!
Juste 2-3 trucs :
Selon ma *courte* experience, l'utilisation de glut si elle simplifie grandement certaines choses comme l'initialisation de la fenetre de maniere portable etc, ben... Enfin moi j'aime pas :) Et j'ai jamais reussi à faire un timer correct avec puisque le débat en est là.
Encore un truc de chipotage : on ne balance pas de code dans un .h! uniquement les prototypes/déclarations, les definitions (le vrai code quoi) étant toujours dans un .cpp...
Pour ce qui est de l'optimisation... Quelques conseils tres simples:
Je vois que tu charges les textures pendant l'affichage... Hop hop hop on prend son courage à 2 mains, on fait une procédure d'initialisation qui s'occupe de charger tout ce qui est nécessaire une bonne fois pour toute, on garde les id des textures dans un coin (ici la programmation objet t'aiderai mais bon on complique pas trop et puis je viens de voir que tu t'en sors déja pour la position du vaisseau, ben tu nous fait pareil pour les id des textures) et on les utilise comme tu le fais! Simplement on ne charge jamais en pleine boucle, si opengl n'etait pas super intelligent bah ton HDD tournerait à bloc comme un fou, tu imagines charger 20Ko 60 fois par seconde... Ca commence à faire! ;) Et je me demande si c'est pas pour ça que comme tu dis dans un post précédent ton programme finis par ramer, ramer des qu'il y a des textures...
Derniere chose de re-chipoteur ( donc en fait si tu suis bien, les "qlq conseils d'optimisation" se sont transformés en 1 seul conseil :) Indente ton code, ça simplifie la lecture et c'est pas plus mal de prendre les bonnes habitudes dès le début :D

Voila désolé si je chipote tout le temps (et encore je me retiens ;) mais faut pas m'en vouloir je dis ça dans ton interet :)
Sur ce, merci pour cette source et bonne prog !

Commentaire de Funto66 le 21/06/2004 15:07:11

Huh, les textures sont chargées à chaque appel à Display()?
J'avais pas vu....Faut JAMAIS faire ça lol

Sinon pour l'utilisation de GLUT, le code dans les fichiers .h et la programmation non orientée objet, mea culpa, tout est de ma faute Wett... C'est en fait comme ça que j'expliquais dans mes tutoriaux sur http://www.amk-project.ft.st...j'ai honte, tu peux me taper, vas-y te gêne pas...

Commentaire de Funto66 le 21/06/2004 15:11:22

Huh, les textures sont chargées à chaque appel à Display()?
J'avais pas vu....Faut JAMAIS faire ça lol

Sinon pour l'utilisation de GLUT, le code dans les fichiers .h et la programmation non orientée objet, mea culpa, tout est de ma faute Wett... C'est en fait comme ça que j'expliquais dans mes tutoriaux sur http://www.amk-project.ft.st...j'ai honte, tu peux me taper, vas-y te gêne pas...

Commentaire de kenjimax le 22/06/2004 12:16:45

lol Funto, c'est vrai que c'est un peu de sa faute, mais cela m'aide à y voir plus clair. Sinon, pour le chargement des textures, le probleme c'est que meme en mettant une identité specifique a chaque texture, la texture courante (celle qui est utilisé lorsque je fais glBind...) est toujours la derniere chargée, je dois pas m'y prendre correctement.

En tout cas, merci Wett pour ton commentaire.

Commentaire de Wett le 22/06/2004 13:21:07

Oui c'est normal, en fait effectivement tu ne t'y prends pas bien pour charger les textures, heureusement que tu pointes là dessus j'avais pas fait attention

Voila ta déclaration:
enum
{
TEX_UNIVERS=1,
TEX_VAISSEAU_JOUEUR=1,
TEX_TIR_ROUGE=1
};

et là --> Pb! En fait opengl attribue à chaque texture un Id, mais il ne le fait pas automatiquement, c'est toi dans ton appel à loadTGA ( ou plutot dans les appels à opengl qui y sont inclus ) qui le définis. Or Toutes tes textures ont un id de 1! Donc à chaque fois il remplace la texture d'id 1 par la dernière chargée!

Pour corriger -> Met plutot quelque chose du genre

enum
{
TEX_UNIVERS=1,
TEX_VAISSEAU_JOUEUR=2,
TEX_TIR_ROUGE=3
};

Et là t'auras plus de probleme... En fait c'est moche de donner toi meme les id des textures, il existe une fonction opengl faite pour te délivrer un id libre à coup sur, mais je m'en rappelle plus, funto le sait surement et j'ai la flemme de chercher :) mais l'idée est la meme --> Donner TJS des Id différents!

Commentaire de kenjimax le 22/06/2004 13:21:46

Par exemple, dans la source que je viens de mettre, et bien c'est la texture "tir_rouge" qui est chargée, alors que ce n'est pas elle que je bind. La texture courante est toujours la derniere chargée avec loadTGA. Est ce que qqln a une explication ?

Commentaire de Wett le 22/06/2004 13:30:48

Bah je viens de te la donner... :D Je t'ai pris de vitesse mdr

Commentaire de AmK le 22/06/2004 13:39:25

puts("J'ecris un programme alors que j'ai le BAC dans 1 semaine...\n\n"); // cingléééééééééé !!!!!!!!

loooooooooool

Commentaire de kenjimax le 22/06/2004 14:26:13

Merci beaucoup !

La fonction pour obtenir l'ID je la connais, c'est glGenTextures(nbr_de texture, référence)

Je vais essayer comme ca, si ca fonctionne merci bcp ! sinon, merci quand meme...

Commentaire de Wett le 22/06/2004 15:09:40

Ouais voila c'est ça la fonction :)
Sur ce j'espere t'avoir aidé, bonne prog!

Commentaire de kenjimax le 22/06/2004 15:45:54

.....cela ne marche pas...

Je desespere un peu, j'ai l'impression d'avoir fait tout ce que vous aviez di et pourtant j'ai toujours le meme probleme avec loadTGA...et je n'arrive pas à trouver de source qui utilise des textures TGA avec le loader de nate miller, si quelqu'un avait ca sous la main ?

Commentaire de Funto66 le 23/06/2004 00:23:29

Je te l'ai dit plus haut : certaines de tes textures TGA ne marchent pas parce que le loader de Nate Miller n'accepte que des textures non compressées.
J'ai écris plus haut aussi que j'avais écrit un loader qui supportait les textures TGA compressées, c'est pas pour rien...

Tu nous dis que ça marche pas mais tu ne nous montre pas le code.
Tu pourrais faire comme ça dans un 1er temps :

// En variables globales (oui, je sais, c'est pas propre, mais bon
// de toutes façons vu comment est le programme...)
GLuint g_ID_tir_rouge;
// IDs des autres textures aussi...

// Dans init() , après un #include "TGALoader.h" (mon loader de TGA) :
// (glGenTextures() est appelé dans mon loader en interne).
TGALoader tga_loader;
tga_loader.LoadOpenGLTexture("TEX_TIR_ROUGE.tga", &g_ID_tir_rouge);

// Dans Display(), pour le bind :
glBindTexture(GL_TEXTURE_2D, g_ID_tir_rouge);


Voilà, si tu fais comme ça normalement ça devrait marcher.

PS : Y'a albert0 qui a en prjet d'améliorer ta source, on en a parlé ensemble et j'ai rajouté quelques trucs, enfin moi je dis ça comme ça...;)

Commentaire de albert0 le 23/06/2004 09:37:49

oui enfet j'ai ajouté beacoup de truc maintenant : tier a plusieur reprise
- ajout d un menu
- ajout de nivo(1) avec enemi et bosse final

si tu me donne ta benediction kenji je post dèsque j'ai finitde coder les vie

voila ++

Commentaire de kenjimax le 27/06/2004 14:44:38

Bien sur que je te donne ma benediction :D

J'espere que je ne t'ai pas irrité funto ton post parait ecri par quelqu'un de légèrement exaspéré... excuse moi, si tu etais comme cela a cause de moi...

Merci à tous en tout cas !
Je peux pas m'y remettre tout de suite parce que j'ai l'oral du bac de francais mardi...

Merci Albert aussi de t'être intéressé à ma source !

Commentaire de Funto66 le 27/06/2004 23:33:22

Euh...ben je sais plus si j'étais irrité ou non, c pas grave ;)
Toi aussi t'as l'oral de français :'(
Bonne chance...

Commentaire de albert0 le 28/06/2004 10:25:20

vive la suisse nous a finit depui 2 semaine et 1 jour :D

Commentaire de Seiken le 22/08/2004 16:43:54

"/* OpenGL animation code goes here */"
"/* shutdown OpenGL */"

Hum, pourquoi tu met les commentaires en anglais ?

Commentaire de Funto66 le 23/08/2004 13:05:48

Ben à mon avis comme bcp de gens kenji a repris un code de base pas de lui, pour ouvrir une fenêtre et gérer les évènements.

Commentaire de kenjimax le 26/08/2004 14:46:11

C'etait juste pour l'exemple :D
D'habitude je fais tout, tout seul ! Avec glut ;)

Commentaire de rrk275 le 01/07/2005 21:01:47

Il reste plus qu'a jarter Glut et se cera bon ...

Commentaire de greg le grand le 16/07/2005 09:51:26


Moi j'arrive pas à l'ouvrir y'a l'ecran blance et rien

Commentaire de bloom1 le 03/08/2005 21:31:27

Comment vous faites pour faire un image en format tga ??? Moi il veut pas ouvrir avec paint lol

 Ajouter un commentaire




Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,421 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales