begin process at 2012 05 27 15:25:31
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

OpenGL

 > DEBUT DE MODELEUR 3D

DEBUT DE MODELEUR 3D


 Information sur la source

Note :
Aucune note
Catégorie :OpenGL Classé sous :qt, scene, modeleur, xml, opengl Niveau :Initié Date de création :28/05/2006 Date de mise à jour :14/06/2006 21:07:20 Vu / téléchargé :8 043 / 539

Auteur : Mattpbem

Ecrire un message privé
Commentaire sur cette source (3)
Ajouter un commentaire et/ou une note

 Description

Cliquez pour voir la capture en taille normale
c'est un debut seulement mais la structure y est :
j'utilise Qt et QGLviewer (un QGLWidget amelioré) pour afficher

Features :
-creation d'un cube à partir d'un fichier
-fichier(qui n'est plus Xml mais un melange xml/binaire (le xml est plus pratique pour deboguer mais le binaire est plus facile à gerer)
-calcul de normal
-node de transformation(Scale,translation,rotation) mais la combinaison scale+rotation ne donne pas le bon resultat
-label 3D / texte 2D
-Structure de la scene en arbre

Source

  • /*!
  • CNode Definition
  • !*/
  • //traverse Dom to load
  • bool CNode::Load(QDomNode node,CNode* caller)
  • {
  • QDomNode child;
  • setName( node.toElement().attribute("name","defaultCNode"));
  • for(int i=0;i<node.childNodes().length();i++)
  • {
  • child = node.childNodes().item(i);
  • logstr << "Node::Load->" << child.nodeName() << "(" << name << ")" << endl;
  • CNode* ptr = caller->Spawn(child.nodeName()); //new child type nodename
  • if(ptr)
  • ptr->Load(child,ptr); //child load event(new child,glinit)
  • else
  • logstr << "Node::Error->" << child.nodeName() << "(" << name << ")" << endl;
  • }
  • }
  • CNode* CNode::Spawn(QString type)
  • {
  • logstr << "No Spawn for:" << type;
  • return 0;
  • }
  • // add a child to our custody
  • void CNode::AddChild( CNode* pNode )
  • {
  • Children.push_back(pNode);
  • }
  • // update our scene node //scene node traversal //bounding box,animation //done once per frame
  • bool CNode::Update()
  • {
  • // loop through the list and update the children
  • for( std::list<CNode*>::iterator i = Children.begin();
  • i != Children.end(); i++ )
  • {
  • (*i)->Update();
  • }
  • }
/*!
CNode Definition
!*/

//traverse Dom to load
bool CNode::Load(QDomNode node,CNode* caller)
{
    QDomNode child;
    setName( node.toElement().attribute("name","defaultCNode"));

    for(int i=0;i<node.childNodes().length();i++)
    {
        child = node.childNodes().item(i);

        logstr << "Node::Load->" << child.nodeName() << "(" << name << ")" << endl;

        CNode* ptr = caller->Spawn(child.nodeName()); //new child type nodename
        if(ptr)
            ptr->Load(child,ptr); //child load event(new child,glinit)
        else
            logstr << "Node::Error->" << child.nodeName() << "(" << name << ")" << endl;
    }
}

CNode* CNode::Spawn(QString type)
{
    logstr << "No Spawn for:" << type;
    return 0;
}

// add a child to our custody
void CNode::AddChild( CNode* pNode )
{
    Children.push_back(pNode);
}

// update our scene node //scene node traversal //bounding box,animation //done once per frame
bool CNode::Update()
{

    // loop through the list and update the children
    for( std::list<CNode*>::iterator i = Children.begin();
            i != Children.end(); i++ )
    {

        (*i)->Update();
    }

}

 Conclusion

il faut que je fasse les premiers outils de modelisation et l'application de texture maintenant
j'essaye de ne plus utiliser QT petit à petit

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Historique

14 juin 2006 21:07:20 :
Amelioration : -node de transformation -independance au parser XML de QT -objet myString

 Sources du même auteur

Source avec Zip Source avec une capture MOTEUR 3D DIMETRIQUE
Source avec Zip Source avec une capture CLASSE WEBCAM AVANCÉ ET SON UTILISATION
Source avec Zip Source avec une capture MOTEUR 3D ISOMÉTRIQUE EN OPENGL

 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

 Sources en rapport avec celle ci

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 LETTRES 3D AVEC OPENGL ET QT par opossum_farceur
Source avec Zip Source avec une capture CAPTURE ECRAN OU WEBCAM par TheTiger
Source avec Zip Source avec une capture UN MINI-MODELEUR 3D AVEC DEV-C++ par pgl10

Commentaires et avis

Commentaire de dletozeun le 01/06/2006 21:14:03

Je ne peux pas tester pour l'instant ton appli mais il y a manifestement un probleme avec les normales de ton parallelépipède...
L'eclairage devrait etre uniforme sur chaque face et ici il y a un espece de degradé...

Cela viens sans doute du fait que pour calculer les normales des sommets tu fais la moyenne des normales des faces qui le ontient...
Ce qu'il faudrais que tu fasses c'est d'implementer des groupes de lissage c'est a dire des groupes de polygones qui dont les normales au sommets sont la moyenne des normales des faces le contenant...les sommets aux extrémités des groupes n'utilisant pas les normales des faces voisines. ( j'espere que c'est comprehensible...c'est pas evident a expliquer avec du texte! :) )

Ainsi dans le cas present tu cré un groupe de lissage par face du parallelépipède qui peuvent etre formées de un ou plusieurs polygones.

Voila bonne continuation!

Commentaire de Mattpbem le 03/06/2006 09:06:59

je n'ai pas bien compris l'histoire du groupe de lissage mais je ferai une recherche google
pour le probléme d'éclairage c'est reglé, il fallait juste éliminer les normales en double(car le cube est fait avec des triangles)
et je fais les normales par vertex car j'utilise des tableaux de vertex(asssocié à un tableau de normals) je ne sais pas comment asssocié les normales à chaque index pourtant je vais devoir le faire pour les coordonnées de texture)
sinon j'ai implémenter un node de transformation(translation,rotation,scale) mais lors d'une rotation+scale mon cube se deforme je ne sais pas pourquoi
maintenant j'essaye de remplacer la gestion des nodes(que je faisais avec QT Xml) par ma propre gestion mais j'ai un probléme avec les strings(depassement mémoire pour des raisons inconnu)
j'updaterai le code quand tout fonctionnera correctement

Commentaire de dletozeun le 03/06/2006 11:04:37

Oui c'est difficile a expliquer comme ca...mais tu te rendras compte du probleme plus tard.

Dans des modeleurs tels que 3dsmax ou maya tu as cette implementation des groupes de lissage ( et je suppose dna stous les autres modeleurs 3d).
Et en fait les normales sont plutot associées a chaque triangle car les triangles que tu dessines ont bien souvent des sommets en commun; et si tu veux montrer a l'eclairage une rupture de pente nette comme l'arete d'un cube entre deux faces tu as necessairement besoin de 2 normales (ou plus) par sommet de l'arete...
C'est pour ca que les normales ne doivent pas etre associées aux sommets mais au sommets.

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

OPENGL redimemsionnement [ par haklia ] Bonjour, voila g un probleme en fait :g une scene en 3D faites avec glut, et lorsque je redimensionne ma fenetre avec la souris, il y a certaine taill OpenGL / API et Thread [ par Viper31 ] Salut all !J'ai un souci , j'ai une scene opengl dans une fenetre API et lorsque j ouvre une boite de dialog , la scene se fige ! Je voulais savoir si filtrer une scene opengl [ par methos69 ] bonjour,je dois antialiaser des polygon sous opengl v1.1 (et pas une autre)sans utiliser des extensions récentes ( 2 ans minimum) propre aux cartes gr Capturé les mouvement souris pour une scene openGL [ par adess00 ] Salut Je voudrais savoir comment recuperer les mvts de la souris pour me ballader dans ma scene merci QT OpenGL FPS [ par xabila ] bonjour, voil&#224; j'ai pass&#233; un de mes codes glut OpenGL sous QT et en fait je n'arrive pass &#224; convetir mon calcule des fps qui &#233;tai Nommer les axes en opengl [ par klidou ] est ce possible d'inserer une zone texte dans un espace opengl?(pour nommer les axes de coordonnees x,y).merci pour vos reponses. Envoyer sous forme xml (urgent) [ par aurelien070 ] J'ai un fichier(.txt) contenant des valeurs et je dois mettre ces valeurs en xml avec du code c++!! si quelqu'un a du code ca serai sympa!!merci Transparence en OpenGL [ par yayayvon ] Bonjour,J'arrive &#224; afficher des objets&nbsp;textur&#233;s transparents (utilisation du blending et gldepthMask), mais seulement en les affichant Problème de Transparence Opengl [ par yayayvon ] Bonjour,J'arrive &#224; afficher des objets&nbsp;textur&#233;s transparents (utilisation du blending et gldepthMask), mais seulement en les affichant problème police openGl [ par vodkapomme43 ] Bonjour,J'utilise le code suivant pour cr&#233;er une police avec OPenGL:GLvoid BuildFont(GLvoid)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Bu


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 : 1,373 sec (3)

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