IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Delphi Discussion :

3DSLoader et OpenGL


Sujet :

Langage Delphi

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    348
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 348
    Points : 103
    Points
    103
    Par défaut 3DSLoader et OpenGL
    Bonjour à tous,
    J'utilise OpenGL et je voudrais intégrer un personnage 3D modélisé avec 3DSMax dans un repère de mon projet Delphi.

    J'ai trouvé et téléchargé sur Internet Sulaco 3DSLoader et d'après ce que j'ai compris qu'il faut faire, j'ai fais ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    //Initialisation
    
    //Variables a initialiser
    ate := 0;
    a := 0;
    b := 0;
    c := 0;
    
    //Procedures a initialiser
    remplissage_de_tableau;
    
    begin
    //  CreateGLContext(Handle);
    
      Model:=T3DModel.Create;            // Instance of T3DModel
      Model.LoadFromFile('donkey.3ds');  // Load the 3DS file
    
      glEnable(GL_LIGHT0);    // Enable Light0
    //  glEnable(GL_LIGHTING);  // Enable Lighting
    end;
    
    
    //BOUCLE DE JEU PRINCIPALE à partir d'ici
    Puis plus bas dans mon repère dans la boucle de jeu:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    glbegin(GL_POLYGON);
    glColor4ub (255, 255, 255, 90);
    glusphere (glunewQuadric(), 0.15, 100, 100);
    gldepthmask(GL_TRUE);
      ClearGL;
      Model.Draw;
      SwapGL;
    glEnd;
    En fait je voudrais que mon personnage 3DS soit dans la sphère semi-transparente (pour ceux qui ont vu ).

    Mais j'ai des problèmes avec trucs en rouge gras:

    - On me dit que GLcreatecontext et Handle ne sont pas déclarés alors que j'ai rajouté tous les units du loader à mon projet et ajouté tous les uses qui manquaient

    - glEnable(GL_LIGHTING); assombrit trop ma carte; elle devient presque noire!

    - ClearGL; me fait disparaitre carrément la map.

    J'ai mis ces bouts de code en commentaire en attendant de trouver la solution, mais mon personnage n'apparait pas.
    Me manque t'il quelque chose?

    Merci d'avance pour votre aide.

  2. #2
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 430
    Points
    28 430
    Par défaut
    si ton code fonctionne, le CreateGLContext ne doit pas être utile...à vu de nez c'est une fonction qui accepte en paramètre un HWnd (TForm.Handle) pour créer le contexte OpenGL.

    le LIGHTNING implique de déclarer correctement la position du spot 0 et de la façon dans les couleurs sont traitées...pour un rendu efficace il faut aussi que les normales soient gérées sur ton modèle...c'est un peu complexe.

    ClearGL est probablement une fonction qui fait appel à glClear(), elle devrait être appelée en tout début de rendu pour effacer le précédent rendu

    et pour fini le glBegin/glEnd n'est pas utilisé correctement

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
     glbegin(GL_POLYGON); // on va tracer un polygon ?
      glColor4ub (255, 255, 255, 90); // de cette couleur ?
    // ah ben non, finalement tu veux une sphere
     glusphere (glunewQuadric(), 0.15, 100, 100);
    // c'est pas le moment de parler du Depth Mask
     gldepthmask(GL_TRUE);
    // toujours pas de tracer de polygon, mais un clear ?!!
      ClearGL;
    // on part sur un autre tracé ?
      Model.Draw;
    // le tout est affiché à l'écran...mais où est le polygon ?
      SwapGL;
    // fin du polygon :D
    glEnd;
    glBegin/glEnd permet de définir le contexte dans lequel des fonctions comme glVertex ou glNormal sont utilisées

    exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
     ClearGL; // on part d'un écran vierge
     
     glBegin(GL_TRIANGLES); // des séries de trois points font des triangles
      glVertex3f(x1,y1,z1); 
      glVertex3f(x2,y2,z3);
      glVertex3f(x3,y3,z3);
    // on peut passer à une nouvelle série de trois points
     glEnd; // ou mettre fin aux triangles
     
     glBegin(GL_POLYGON); // un polygone
      glVertex3f(x1,y1,z1); 
      glVertex3f(x2,y2,z3);
      glVertex3f(x3,y3,z3);
      glVertex3f(x1,y1,z1);  // j'ai un doute, faut-il boucler sur le premier point ?!
     glEnd; // fin du polygone
     
     SwapGL; // le rendu est fini, on l'affiche
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    348
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 348
    Points : 103
    Points
    103
    Par défaut
    Ok, merci Paul TOTH pour l'éclaircissement.
    J'ai enlevé les glBegin(GL_POLYGON); et glEnd; mais mon personnage 3ds (c'est un âne) ne s'affiche toujours pas...

    Le glDepthMask(GL_TRUE); c'est pour désactiver le buffer pour que la sphère soit semi-transparente (je veux que l'âne apparaisse à l'intérieur).

    Le truc c'est qu'avec mon code, la sphère initialement semi-transparente blanche devient semi-transparente marron! Mais pas d'âne...

    Une idée?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    gldepthmask(gl_false); //désactive le buffer
    glenable(GL_BLEND); //active le blending pour la semi-transparence
    glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA ); //...pareil ou un truc du genre...
    glColor4ub (255, 255, 255, 90); //Couleur et semi-transparence
    glusphere (glunewQuadric(), 0.15, 100, 100); //sphère
    gldepthmask(GL_TRUE); //Réactive le buffer
    Model.Draw;  // Soi-disant dessine le modèle 3DS
    SwapGL; //Ca j'en sais rien... tu l'as écrit.

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    348
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 348
    Points : 103
    Points
    103
    Par défaut
    Ah ben si ça y est je comprends!
    Il est tellement grand qu'on ne le voyait pas, je l'ai aperçu en tournant la caméra!

  5. #5
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 430
    Points
    28 430
    Par défaut
    Citation Envoyé par User Name Voir le message
    Ah ben si ça y est je comprends!
    Il est tellement grand qu'on ne le voyait pas, je l'ai aperçu en tournant la caméra!
    quel âne tu fais
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    348
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 348
    Points : 103
    Points
    103
    Par défaut
    Au passage j'ai un autre problème: j'ai réussi à intégrer le personnage correctement (grâce à glScalef) mais j'avais des carottes oranges dans le jeu qui sont devenues noires!
    Y a rien à faire; si je change la couleur d'orange en blanc... elles restent tout de mêmes noires!

    En plus, normalement y a une sphère semi-transparente qui devient... bleu turquoise!

    Quelqu'un peut m'expliquer d'où peut provenir ce problème?
    Merci d'avance

  7. #7
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 430
    Points
    28 430
    Par défaut
    Citation Envoyé par User Name Voir le message
    Au passage j'ai un autre problème: j'ai réussi à intégrer le personnage correctement (grâce à glScalef) mais j'avais des carottes oranges dans le jeu qui sont devenues noires!
    Y a rien à faire; si je change la couleur d'orange en blanc... elles restent tout de mêmes noires!

    En plus, normalement y a une sphère semi-transparente qui devient... bleu turquoise!

    Quelqu'un peut m'expliquer d'où peut provenir ce problème?
    Merci d'avance
    ça ressemble à un Ligthning mal configuré...désactive le.
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    348
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 348
    Points : 103
    Points
    103
    Par défaut
    ça ressemble à un Ligthning mal configuré...désactive le.
    J'y ai pensé mais ce n'est pas ça...
    En fait, la couleur de ma sphère dépend de la texture de mon background, et prend la couleur de l'âne si j'enlève l'image du fond du jeu!

    Quant aux carottes je ne sais pas.

  9. #9
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 430
    Points
    28 430
    Par défaut
    Citation Envoyé par User Name Voir le message
    J'y ai pensé mais ce n'est pas ça...
    En fait, la couleur de ma sphère dépend de la texture de mon background, et prend la couleur de l'âne si j'enlève l'image du fond du jeu!

    Quant aux carottes je ne sais pas.
    tu utilises des textures pour ton ane ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    glDisable(GL_TEXTURE_2D);
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Directx ou opengl
    Par scorpiwolf dans le forum DirectX
    Réponses: 13
    Dernier message: 07/02/2003, 08h29
  2. interface utilisateur avec OpenGL
    Par demis20 dans le forum OpenGL
    Réponses: 6
    Dernier message: 03/10/2002, 12h27
  3. OpenGL et *.3ds
    Par tintin22 dans le forum OpenGL
    Réponses: 4
    Dernier message: 06/05/2002, 13h51
  4. OpenGL ou DirectX
    Par Nadir dans le forum DirectX
    Réponses: 6
    Dernier message: 02/05/2002, 12h48
  5. Opengl -- Les surfaces
    Par Anonymous dans le forum OpenGL
    Réponses: 2
    Dernier message: 02/05/2002, 10h14

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo