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

Ogre Discussion :

FPS faible ogre3d rendu simple


Sujet :

Ogre

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 2
    Points : 1
    Points
    1
    Par défaut FPS faible ogre3d rendu simple
    Bonjour,
    Débutant en ogre3d je me teste à faire des essaies.

    Je voudrais généré un monde en 3d mais uniquement avec des cubes (style légo).

    J'ai écrit ce code qui fonctionne :

    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
     
    Ogre::String lNameOfTheMesh = "MeshCube";	
    Ogre::ManualObject* manual = mSceneMgr->createManualObject("manual");
    manual->begin("BaseWhiteNoLighting", Ogre::RenderOperation::OT_TRIANGLE_LIST);
    				float cp = 10.0 ;
    				float cm = -10.0;
     
    				manual->position(cm, cp, cm);// a vertex
    				manual->colour(Ogre::ColourValue(0.0f,1.0f,0.0f,1.0f));
    				manual->textureCoord(0.0, 1.0);
    				manual->position(cp, cp, cm);// a vertex
    				manual->colour(Ogre::ColourValue(1.0f,1.0f,0.0f,1.0f));
    				manual->textureCoord(1.0, 1.0);
    				manual->position(cp, cm, cm);// a vertex
    				manual->colour(Ogre::ColourValue(1.0f,0.0f,0.0f,1.0f));
    				manual->textureCoord(1.0, 0.0);
    				manual->position(cm, cm, cm);// a vertex
    				manual->colour(Ogre::ColourValue(0.0f,0.0f,0.0f,1.0f));
    				manual->textureCoord(0.0, 0.0);
     
    				manual->position(cm, cp, cp);// a vertex
    				manual->colour(Ogre::ColourValue(0.0f,1.0f,1.0f,1.0f));
    				manual->textureCoord(0.0, 1.0);
    				manual->position(cp, cp, cp);// a vertex
    				manual->colour(Ogre::ColourValue(1.0f,1.0f,1.0f,1.0f));
    				manual->textureCoord(1.0, 1.0);
    				manual->position(cp, cm, cp);// a vertex
    				manual->colour(Ogre::ColourValue(1.0f,0.0f,1.0f,1.0f));
    				manual->textureCoord(1.0, 0.0);
    				manual->position(cm, cm, cp);// a vertex
    				manual->colour(Ogre::ColourValue(0.0f,0.0f,1.0f,1.0f));
    				manual->textureCoord(0.0, 0.0);
    				manual->triangle(0,1,2);
    				manual->triangle(2,3,0);
    				manual->triangle(4,6,5);
    				manual->triangle(6,4,7);
     
    				// face top / down
    				manual->triangle(0,4,5);
    				manual->triangle(5,1,0);
    				manual->triangle(2,6,7);
    				manual->triangle(7,3,2);
     
    				// face left / right
    				manual->triangle(0,7,4);
    				manual->triangle(7,0,3);
    				manual->triangle(1,5,6);
    				manual->triangle(6,2,1);		
     
     
     
    manual->end();
    manual->convertToMesh(lNameOfTheMesh, lNameOfResourceGroup);
    //mSceneMgr->getRootSceneNode()->createChildSceneNode()->attachObject(manual);
     
    int coord_mont[NBMONTAGNE][5];
      int coord_val[NBMONTAGNE][5];
     
    srand(time(NULL));
     
    aleat(coord_mont);
    aleat(coord_val);
     
    for(int i = 0; i < 50; ++i)
    		for(int j = 0; j < 50; ++j)
    		{
    			Ogre::Entity* lEntity = mSceneMgr->createEntity(lNameOfTheMesh);
    			// Now I attach it to a scenenode, so that it becomes present in the scene.
    			Ogre::SceneNode* lNode = mSceneMgr->getRootSceneNode()->createChildSceneNode();
    			lNode->attachObject(lEntity);
    			// I move the SceneNode so that it is visible to the camera.
    			//float lPositionOffset = float(1+ iter * 2) - (float(lNumberOfEntities));
    			lNode->translate(float(10)*i*2,float(1)*altitude(i*20,j*20,coord_mont,coord_val)-100,float(10)*j*2);
    		}
     
    }
    aleat() et altitude() sont mes fonctions de génération du monde.

    Le problème est que lorsque je lance le rendu.

    Le monde est affiché comme je le souhaite mais seulement à 4 fps. (pour 2500 cubes affichés.)
    (J'utilise le framework proposé dans le wiki de ogre3d.org )

    Le problème vient t'il de ma façon de définir les cubes ou je me plante tous simplement de façon de faire ?

    Voici une image de mon rendu. Les couleurs de sont pas importantes je souhaite par la suite mettre des textures d'herbe ou de pierre par exemple.


    Merci par avance de vos futures réponse.
    A bientôt.

  2. #2
    Membre habitué
    Profil pro
    Dev
    Inscrit en
    Mai 2009
    Messages
    257
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Dev

    Informations forums :
    Inscription : Mai 2009
    Messages : 257
    Points : 190
    Points
    190
    Par défaut
    Citation Envoyé par yokoshia Voir le message
    Bonjour,
    Débutant en ogre3d je me teste à faire des essaies.

    Je voudrais généré un monde en 3d mais uniquement avec des cubes (style légo).

    J'ai écrit ce code qui fonctionne :

    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
     
    Ogre::String lNameOfTheMesh = "MeshCube";	
    Ogre::ManualObject* manual = mSceneMgr->createManualObject("manual");
    manual->begin("BaseWhiteNoLighting", Ogre::RenderOperation::OT_TRIANGLE_LIST);
    				float cp = 10.0 ;
    				float cm = -10.0;
     
    				manual->position(cm, cp, cm);// a vertex
    				manual->colour(Ogre::ColourValue(0.0f,1.0f,0.0f,1.0f));
    				manual->textureCoord(0.0, 1.0);
    				manual->position(cp, cp, cm);// a vertex
    				manual->colour(Ogre::ColourValue(1.0f,1.0f,0.0f,1.0f));
    				manual->textureCoord(1.0, 1.0);
    				manual->position(cp, cm, cm);// a vertex
    				manual->colour(Ogre::ColourValue(1.0f,0.0f,0.0f,1.0f));
    				manual->textureCoord(1.0, 0.0);
    				manual->position(cm, cm, cm);// a vertex
    				manual->colour(Ogre::ColourValue(0.0f,0.0f,0.0f,1.0f));
    				manual->textureCoord(0.0, 0.0);
     
    				manual->position(cm, cp, cp);// a vertex
    				manual->colour(Ogre::ColourValue(0.0f,1.0f,1.0f,1.0f));
    				manual->textureCoord(0.0, 1.0);
    				manual->position(cp, cp, cp);// a vertex
    				manual->colour(Ogre::ColourValue(1.0f,1.0f,1.0f,1.0f));
    				manual->textureCoord(1.0, 1.0);
    				manual->position(cp, cm, cp);// a vertex
    				manual->colour(Ogre::ColourValue(1.0f,0.0f,1.0f,1.0f));
    				manual->textureCoord(1.0, 0.0);
    				manual->position(cm, cm, cp);// a vertex
    				manual->colour(Ogre::ColourValue(0.0f,0.0f,1.0f,1.0f));
    				manual->textureCoord(0.0, 0.0);
    				manual->triangle(0,1,2);
    				manual->triangle(2,3,0);
    				manual->triangle(4,6,5);
    				manual->triangle(6,4,7);
     
    				// face top / down
    				manual->triangle(0,4,5);
    				manual->triangle(5,1,0);
    				manual->triangle(2,6,7);
    				manual->triangle(7,3,2);
     
    				// face left / right
    				manual->triangle(0,7,4);
    				manual->triangle(7,0,3);
    				manual->triangle(1,5,6);
    				manual->triangle(6,2,1);		
     
     
     
    manual->end();
    manual->convertToMesh(lNameOfTheMesh, lNameOfResourceGroup);
    //mSceneMgr->getRootSceneNode()->createChildSceneNode()->attachObject(manual);
     
    int coord_mont[NBMONTAGNE][5];
      int coord_val[NBMONTAGNE][5];
     
    srand(time(NULL));
     
    aleat(coord_mont);
    aleat(coord_val);
     
    for(int i = 0; i < 50; ++i)
    		for(int j = 0; j < 50; ++j)
    		{
    			Ogre::Entity* lEntity = mSceneMgr->createEntity(lNameOfTheMesh);
    			// Now I attach it to a scenenode, so that it becomes present in the scene.
    			Ogre::SceneNode* lNode = mSceneMgr->getRootSceneNode()->createChildSceneNode();
    			lNode->attachObject(lEntity);
    			// I move the SceneNode so that it is visible to the camera.
    			//float lPositionOffset = float(1+ iter * 2) - (float(lNumberOfEntities));
    			lNode->translate(float(10)*i*2,float(1)*altitude(i*20,j*20,coord_mont,coord_val)-100,float(10)*j*2);
    		}
     
    }
    aleat() et altitude() sont mes fonctions de génération du monde.

    Le problème est que lorsque je lance le rendu.

    Le monde est affiché comme je le souhaite mais seulement à 4 fps. (pour 2500 cubes affichés.)
    (J'utilise le framework proposé dans le wiki de ogre3d.org )

    Le problème vient t'il de ma façon de définir les cubes ou je me plante tous simplement de façon de faire ?

    Voici une image de mon rendu. Les couleurs de sont pas importantes je souhaite par la suite mettre des textures d'herbe ou de pierre par exemple.


    Merci par avance de vos futures réponse.
    A bientôt.
    2329 batches faut pas t'étonner

    si ta scene est statique (sans animations) tu peux regrouper toute ta géométrie dans un static mesh, cf la doc de Ogre sur le sujet

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Merci cela fonctionne maintenant parfaitement !

  4. #4
    Membre actif
    Profil pro
    Directeur technique
    Inscrit en
    Juillet 2007
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Juillet 2007
    Messages : 107
    Points : 200
    Points
    200
    Par défaut
    Euh le code que tu a poste est a chaque update ?

    Si oui ca veut dire que tu recrée tout tes objets a chaque Update, c'est aussi un problème ( plus important que de ne pas avoir un seul gros static mesh ).

  5. #5
    Expert éminent sénior
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 361
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 361
    Points : 20 379
    Points
    20 379
    Par défaut
    Salut comme le dit Christuff si tu recrées des objets cube à chaque étape de rendu pas étonnant que tu aies un rendu très lent

  6. #6
    Membre habitué
    Profil pro
    Dev
    Inscrit en
    Mai 2009
    Messages
    257
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Dev

    Informations forums :
    Inscription : Mai 2009
    Messages : 257
    Points : 190
    Points
    190
    Par défaut
    Le problème venait manifestement des batches et il l'a réglé, cf. sa réponse

  7. #7
    Membre actif
    Profil pro
    Directeur technique
    Inscrit en
    Juillet 2007
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Juillet 2007
    Messages : 107
    Points : 200
    Points
    200
    Par défaut
    Citation Envoyé par coda_blank Voir le message
    Le problème venait manifestement des batches et il l'a réglé, cf. sa réponse
    C'est pas parce que le problème de fps s'est améliore qu'il est forcement réglé.

    Si, a chaque frame il ne recrée qu'un seul objet, alors ca "cache" le problème, sans le corriger

Discussions similaires

  1. Faibles performances avec un espace de stockage "simple"
    Par Isaldas dans le forum Windows 8
    Réponses: 0
    Dernier message: 12/12/2014, 15h44
  2. Réponses: 0
    Dernier message: 06/02/2013, 10h42
  3. [Bioshock] bien plus qu'un simple FPS
    Par Barsy dans le forum PC
    Réponses: 6
    Dernier message: 23/10/2009, 15h57
  4. Question :optimisation du rendu Ogre3d
    Par Mytech dans le forum Ogre
    Réponses: 8
    Dernier message: 21/06/2008, 22h23
  5. recherche exemple simple pour corba en c++
    Par Pinggui dans le forum CORBA
    Réponses: 4
    Dernier message: 06/05/2002, 11h29

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