Questions propos de l'opengl

Messages postés
71
Date d'inscription
jeudi 2 octobre 2003
Statut
Membre
Dernière intervention
12 septembre 2013
- - Dernière réponse :  jyle3d - 28 janv. 2005 à 11:50
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
Afficher la suite 

20/29 réponses

Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
5
0
Merci
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
Commenter la réponse de cs_djl
Messages postés
71
Date d'inscription
jeudi 2 octobre 2003
Statut
Membre
Dernière intervention
12 septembre 2013
0
Merci
ok alors que me conseille tu comme modeleur ? si possible gratuit avec l'url ki va bien :D
Commenter la réponse de cs_Scooper
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
5
0
Merci
je pe pas te conseiller, je suis moi meme a la recherche de ce genre de modeleur
Commenter la réponse de cs_djl
Messages postés
71
Date d'inscription
jeudi 2 octobre 2003
Statut
Membre
Dernière intervention
12 septembre 2013
0
Merci
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 :)
Commenter la réponse de cs_Scooper
Messages postés
1267
Date d'inscription
mercredi 1 janvier 2003
Statut
Membre
Dernière intervention
28 février 2007
3
0
Merci
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....
Commenter la réponse de Funto66
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
5
0
Merci
ouai, merci Scooper, c'est exactement ce qu'il me fallait, je vais tester
Commenter la réponse de cs_djl
Messages postés
71
Date d'inscription
jeudi 2 octobre 2003
Statut
Membre
Dernière intervention
12 septembre 2013
0
Merci
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 :)
Commenter la réponse de cs_Scooper
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
5
0
Merci
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 ;)
Commenter la réponse de cs_djl
Messages postés
71
Date d'inscription
jeudi 2 octobre 2003
Statut
Membre
Dernière intervention
12 septembre 2013
0
Merci
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
Commenter la réponse de cs_Scooper
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
5
0
Merci
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++
Commenter la réponse de cs_djl
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
5
0
Merci
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();
}

Commenter la réponse de cs_djl
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
5
0
Merci
faut remplacer les vertex :dissapprove) par vertex[ v ]
Commenter la réponse de cs_djl
Messages postés
1267
Date d'inscription
mercredi 1 janvier 2003
Statut
Membre
Dernière intervention
28 février 2007
3
0
Merci
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....
Commenter la réponse de Funto66
Messages postés
71
Date d'inscription
jeudi 2 octobre 2003
Statut
Membre
Dernière intervention
12 septembre 2013
0
Merci
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 :(
Commenter la réponse de cs_Scooper
Messages postés
1267
Date d'inscription
mercredi 1 janvier 2003
Statut
Membre
Dernière intervention
28 février 2007
3
0
Merci
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....
Commenter la réponse de Funto66
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
5
0
Merci
oui, il faut absolument aller voir le code de funto
Commenter la réponse de cs_djl
Messages postés
1267
Date d'inscription
mercredi 1 janvier 2003
Statut
Membre
Dernière intervention
28 février 2007
3
0
Merci
Euh...est-ce que c'est de l'ironie?

Patience et longueur de temps font plus que force ni que rage....
Commenter la réponse de Funto66
Messages postés
71
Date d'inscription
jeudi 2 octobre 2003
Statut
Membre
Dernière intervention
12 septembre 2013
0
Merci
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
Commenter la réponse de cs_Scooper
Messages postés
1267
Date d'inscription
mercredi 1 janvier 2003
Statut
Membre
Dernière intervention
28 février 2007
3
0
Merci
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....
Commenter la réponse de Funto66
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
5
0
Merci
lol, ben non j'aurai quand mem pas fait ca
Commenter la réponse de cs_djl