Questions propos de l'opengl

Signaler
Messages postés
71
Date d'inscription
jeudi 2 octobre 2003
Statut
Membre
Dernière intervention
12 septembre 2013
-
 jyle3d -
Bonjour, je commence la programmation en opengl grace au tutos du site : http://nehe.gamedev.net/

Il est facile de creer des cubes, pyramide etc... mais existe-t-il un logiciel gratuit style 3ds max avec lequel je puisse modeler des formes et ensuite les exporter en un fichier texte dont je pourrais lire les formes ?

Sinon quelle est la difference entre programmer en opengl "pur" et avec la librairie glut ?

merci de vos réponses

29 réponses

Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
7
glut c''est des outils pour programmer plus facilement vu que ca gere le fenetrage, le clavier,... et c'est portable. en generale c'est reservé pour les petites demo, si tu cherche la performance passe par win32 sous windows

oui ca existe des modeleur qui permette d'enregistrer dans un format ascii (texte), sinon 3dexplorer peut convertir certains format aussi
Messages postés
71
Date d'inscription
jeudi 2 octobre 2003
Statut
Membre
Dernière intervention
12 septembre 2013

ok alors que me conseille tu comme modeleur ? si possible gratuit avec l'url ki va bien :D
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
7
je pe pas te conseiller, je suis moi meme a la recherche de ce genre de modeleur
Messages postés
71
Date d'inscription
jeudi 2 octobre 2003
Statut
Membre
Dernière intervention
12 septembre 2013

g trouvé ca comme modeleur simple d'utilisation c'est pas mal du tout, j'ai essayer d'exporter au format pov, apres c'est du code ascii donc je vais essayer de coder un ptit truc qui ouvre le fichier et qui récupere les valeurs donc des tableaux ou structure et ensuite pour l'afficher ou bien qui recreer carrement un .cpp a inclure je vais voir
le lien :
http://membres.lycos.fr/jyle3d/

sinon où pourrais-je trouver 3d exploration svp merci :)
Messages postés
1267
Date d'inscription
mercredi 1 janvier 2003
Statut
Membre
Dernière intervention
28 février 2007
3
Moi j'utilisais gmax (dérivé gratuit de 3ds max) pour un projet là, j'ai fait un script d'exportation (en utilisant ce qu'il y a à http://perso.wanadoo.fr/mickagl/ ), ça marchait nickel, mais là je compte passer à Blender (open source, portable, http://www.blender3d.org) et me faire un script d'exportation en Python.

Je vais regarder Jyle3D ça m'a l'air intéressant :)

Patience et longueur de temps font plus que force ni que rage....
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
7
ouai, merci Scooper, c'est exactement ce qu'il me fallait, je vais tester
Messages postés
71
Date d'inscription
jeudi 2 octobre 2003
Statut
Membre
Dernière intervention
12 septembre 2013

2 r1, bon depuis ce matin je viens de m'arracher a convertir les fichiers exporté de jyle3d -> .h
en fait sous jyle, vous faites une forme, puis exporter -> en pov,
puis vous lancer mon log dans la meme dir ke le pov et ca vous ressort un .h avec les glDraw et glEnd
ca gere pas encore les couleurs si yen a ki veulent continuer ca je suis preneur car la jen é un peu marre ^^
g bien galerer pour le faire marcher ce parseur :p
voila la source :

#include <string.h>
#include <stdio.h>
#include <conio.h>
#include <fstream.h>
#include

main()
{
char saisie[50];
char temp[50];
char fichier[50];
char temp2;
float x,y,z;

int i=0,j=0;
cout <<"quel fichier source a traiter ?";
cin>>saisie;
cout<<"le fchier de destination sera :"<<endl<<saisie<<".h"<<endl<<"il suffit d'ajouter #include ""<<saisie<<".h"dans le prog"<<endl<<"et d'appeler la fct trace(); :D";

sprintf(temp,"%s.h",saisie);

ifstream entree;
fstream sortie;
sortie.open(temp,ios::out|ios::trunc);
sortie<<"void trace(void)\n{\n\t";

sprintf(temp,"%s.pov",saisie);
entree.open(temp);
if(entree.fail())
cout <<"pb d'ouverture";

while(!entree.eof())
{

if((entree.get()=='n')&&(entree.get()==' ')&&(entree.get()=='{')&&(entree.get()=='\n')&&(entree.get()=='\t'))
{

temp2=entree.get();
cout<<"dans la boucle";
if (temp2=='3')
sortie<<"glBegin(GL_TRIANGLES);\n";
else if(temp2=='4')
sortie<<"glBegin(GL_QUADS);\n";
else sortie<<"glBegin(GL_POLYGON);\n";

for(j=0;j<=temp2;j++)
{
if((entree.get()==',')&&(entree.get()=='\n')&&(entree.get()=='\t')&&(entree.get()=='<'))
{
while(1)
{
fichier[i]=entree.get();
if(fichier[i]=='>')
{
fichier[i]='\0';
break;
}
i++;
}
sscanf(fichier,"%f,%f,%f",&x,&y,&z);
sprintf(fichier,"glVertex3f(%f,%f,%f);\n",x,y,z);
sortie<<fichier;
i=0;
}}sortie<<"glEnd();\n";}

}

sortie<<"}\n";

entree.close();
sortie.close();

getch();

}

excuser moi si c mal codé mais ca marche :p g fé ca a la va vite

voila :)
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
7
ben des que j'ai le temps j'en ferai un tt propre encapsuler dans un classe, du genre

class Model
{
...
public:
...

void load(const char *filename);

void draw();

};

apres t'aura plus qu'a faire

Modele m("model.pov");

et dans la procedure d'affichage

m.draw();

tu vera c'est beaucoup plus simple comme ca ;)
Messages postés
71
Date d'inscription
jeudi 2 octobre 2003
Statut
Membre
Dernière intervention
12 septembre 2013

oué mais moi comme j'ai di j'ai fais ca a la va vite pr tester rapidement :p car g pas le tps ^^

merci mail moi :p sinon je crois ke l'export de jyle ne gere pas les textures :( enfin bon c'est déjà du beau travail, la je vais tester gmax

c'est vrai que la class ce sera bcp bcp mieux car tous les fichiers seront accessibles mais tu va t'amuser a parser ^^
enfin moi g galerer car ct la 1ere fois ke je devais lire et recuperer comme ca, je l'avais fait avant ds mon snake (cf. ma source) mais le fichier etait déjà tout fait et il n'y avais pas de pb de taille donc c'était tres facil
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
7
non ca va aller pour parser, la structure est pas trop complexe et c++ possed tout les outils necessaire pour parser facilement

arret avec tes sscanf et sprintf et utilise std::stringstream, std::string... tu vera c'est nettemet plus simple a manipuler et c'est du vrai c++
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
7
si tu ve j'ai fais ca si tu veux, ca marche mais ca parse juste les polygone, reste à faire la fonction d'affichage mais ca c'est rien

la fonctioon qui parse est tres simple, elle fait a peine 20 lignes
ta juste a compiler

#include 
#include <fstream>
#include <string>

struct Vertex
{
    float x,y,z;
};

struct Face
{
    Vertex *vertex;
    size_t nbVertex;
    
    Face() : 
    vertex(0), nbVertex(0)
    {}
    
    Face(int n) : 
    vertex(new Vertex[n]), nbVertex(n)
    {}
    
    ~Face()
    {
        delete[] vertex;
    }
    
    Face(const Face &f) : 
    nbVertex(f.nbVertex),
    vertex(new Vertex[f.nbVertex])
    {
        for(size_t i=0; i<nbVertex; i++)
            vertex[i]=f.vertex[i];
    }
    
    Face& operator = (const Face &f)
    {
        if( this  == &f )
            return *this;
            
        nbVertex=f.nbVertex;
        delete[] vertex;
        vertex=new Vertex[nbVertex];
        for(size_t  i=0; i<nbVertex; i++)
            vertex[i]=f.vertex[i];
            
        return *this;
    }
};

class  PovModel
{
    Face *faces;
    size_t nbFaces;
    
public:
    
    PovModel() : faces(0), nbFaces(0) {}
    
    PovModel(const std::string &filename) : faces(0), nbFaces(0)
    {
        load(filename);
    }
    
    PovModel(const PovModel &pm) : 
    nbFaces(pm.nbFaces),
    faces(new Face[pm.nbFaces])
    {
        for(size_t i=0; i<nbFaces; i++)
            faces[i]=pm.faces[i];
    }
    
    PovModel& operator = (const PovModel &pm)
    {
        if( this == &pm )
            return *this;
            
        nbFaces=pm.nbFaces;
        delete[] faces;
        faces=new Face[nbFaces];
        
        for(size_t i=0; i<nbFaces; i++)
            faces[i]=pm.faces[i];
            
        return *this;
    }
    
    ~PovModel()
    {
        delete[] faces;
    }

    void init(const std::string &filename);
    void load(const std::string &filename);
    void displayData() const;
};

using namespace std;

void PovModel::init(const string &filename)
{
    ifstream file( filename.c_str() );
    string line;
       
    while( getline(file,line) )
    {
        while( line!="polygon {" && getline(file,line) );
        nbFaces++;
    } 
    faces=new Face[--nbFaces];
}

void PovModel::load(const string &filename)
{
    size_t idF=0;
    string line;
     
     
    init(filename);
    ifstream file( filename.c_str() );
       
    while( getline(file,line) )
    {
        while( line!="polygon {" && getline(file,line) );
        size_t n;
        file >> n;
        faces[idF]=Face(n);
        
        for(size_t v=0; v<faces[idF].nbVertex; v++)
        {
            file.ignore(100,'<');
            file >>  faces[idF].vertex :dissapprove) .x;
            file.ignore(100,',');
            file >>  faces[idF].vertex :dissapprove) .y;
            file.ignore(100,',');
            file >>  faces[idF].vertex :dissapprove) .z;          
        }
        if(++idF==nbFaces) break;
    }
}

void PovModel::displayData() const
{
    for(size_t f=0; f<nbFaces; f++)
    {
        cout<< "polygone " << f+1 << " :\n";
        for(size_t v=0; v<faces[f].nbVertex; v++)
        {
            cout<< faces[f].vertex :dissapprove) .x << "  ";
            cout<< faces[f].vertex :dissapprove) .y << "  ";
            cout<< faces[f].vertex :dissapprove) .z << '\n';
        }
        cout<<'\n';
    }
}

int main()
{
    PovModel model("toto.pov");
    
    model.displayData();
    
    cout.flush();
    cin.get();
}

Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
7
faut remplacer les vertex :dissapprove) par vertex[ v ]
Messages postés
1267
Date d'inscription
mercredi 1 janvier 2003
Statut
Membre
Dernière intervention
28 février 2007
3
De mon côté si vous voulez je viens de poster mon code, c'est à http://www.cppfrance.com/code.aspx?ID=22851

Patience et longueur de temps font plus que force ni que rage....
Messages postés
71
Date d'inscription
jeudi 2 octobre 2003
Statut
Membre
Dernière intervention
12 septembre 2013

re,
djl je suis sur ke ton code marche mais je comprend rien ^^ on vient seulement de commencer le c++ a l'école, avant on faisait du c donc g encore un peu de mal ac ca :p
mais si il marche avec les triangles,quads et polygones c'est cool pis les couleurs aussi :p

par contre ce qui est ennuyeux c'est que ke jyle ne gere pas les textures a l'exportation je crois :(
Messages postés
1267
Date d'inscription
mercredi 1 janvier 2003
Statut
Membre
Dernière intervention
28 février 2007
3
Scooper >> t'es allé voir mon code?
Pour l'exportation des coordonnées de textures je confirme Jyle de les gère pas.

J'ai la vague sensation de parler dans le vide ces temps-ci...

Patience et longueur de temps font plus que force ni que rage....
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
7
oui, il faut absolument aller voir le code de funto
Messages postés
1267
Date d'inscription
mercredi 1 janvier 2003
Statut
Membre
Dernière intervention
28 février 2007
3
Euh...est-ce que c'est de l'ironie?

Patience et longueur de temps font plus que force ni que rage....
Messages postés
71
Date d'inscription
jeudi 2 octobre 2003
Statut
Membre
Dernière intervention
12 septembre 2013

oui jy vais tout de suite ^^ voir le code de funto ! ^^
sinon moi j'ai ameliorer le mien il gere mtn les couleurs si vs le voulez jle met mais g pas eu le tps de commenter ni de faire ca proprement :p
Messages postés
1267
Date d'inscription
mercredi 1 janvier 2003
Statut
Membre
Dernière intervention
28 février 2007
3
djl >> pardon pour le msg " Euh...est-ce que c'est de l'ironie?" je croyais que tu te foutais de ma gu****, mais vu que t'as laissé un msg sur ma source je vois que non, dsl dsl, on oublie lol

Scooper >> si tu veux poster ton code et que tu le considères comme terminé ajoute une nouvelle source sur CppFrance, ensuite tu pourras la modifier en cas.

Patience et longueur de temps font plus que force ni que rage....
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
7
lol, ben non j'aurai quand mem pas fait ca