Historique des modifications - Message

Message #8721

Sujet: [PC]Ray-tracer en temps réel


Type Date Auteur Contenu
Création du message 06-09-2010 16:20:20 nico
Coucou,
je suis en train de faire comme tu dit Magun mais je rencontre de serieux problème de performances, cela ne viens pas de ton code puisque j'ai regardé dans irrlicht est c'est là même.
outre le problème de lenteur des <vector>, je rencontre maintenant un problème de lenteur sur la structure vecteur3, voici comment j'ai procédé:

Code c++ :


    template<typename T> struct vecteur3
    {
        T X, Y, Z;

        vecteur3(T x=0, T y=0, T z=0) : X(x), Y(y), Z(z) {}

        vecteur3<T> operator + (const vecteur3<T>& v2){ return vecteur3<T>(X + v2.X,  Y + v2.Y,   Z + v2.Z);}
        vecteur3<T> operator - (const vecteur3<T>& v2){ return vecteur3<T>(X - v2.X,  Y - v2.Y,   Z - v2.Z);}
        vecteur3<T> operator * (const float& c)        { return vecteur3<T>(X * c,     Y * c,      Z * c   );}
    };
   typedef vecteur3<float> vecteur3f;

Le problème se situe dans les 'return' des operator qui sont beaucoup plus lent(+10ms par frame) que ça:

Code c++ :


    struct vecteur3f
    {
        float X, Y, Z;
    };
    vecteur3f operator + (const vecteur3f& v1, const vecteur3f& v2){ return (vecteur3f){v1.X + v2.X,  v1.Y + v2.Y,   v1.Z + v2.Z};}
    vecteur3f operator - (const vecteur3f& v1, const vecteur3f& v2){ return (vecteur3f){v1.X - v2.X,  v1.Y - v2.Y,   v1.Z - v2.Z};}
    vecteur3f operator * (const vecteur3f& v1, const float& c)        { return (vecteur3f){v1.X * c,     v1.Y * c,      v1.Z * c   };}

Donc je sais pas comment procéder pour faire un return de ce type mais avec l'organisation précédente ?, en tout cas ce qui est sûre c'est que le code d'irrlicht à encore une bonne marge d'optimisation.

EDIT: c'est bon j'ai trouvé smile le problème venait du constructeur qui m'empêchais de faire ce type de retour, voici le code optimisé:

Code c++ :


    template<typename T> struct vecteur3
    {
        T X, Y, Z;

        vecteur3<T> operator + (const vecteur3<T>& v2){ return (vecteur3<T>){X + v2.X,  Y + v2.Y,   Z + v2.Z};}
        vecteur3<T> operator - (const vecteur3<T>& v2){ return (vecteur3<T>){X - v2.X,  Y - v2.Y,   Z - v2.Z};}
        vecteur3<T> operator * (const float& c)       { return (vecteur3<T>){X * c,     Y * c,      Z * c   };}
    };
    typedef vecteur3<float> vecteur3f;
    vecteur3f  Vecteur3f(float x, float y, float z) {return (vecteur3f){x,y,z};}

C'est un peu moins propre mais beaucoup plus performant !

Retour

Options Liens officiels Caractéristiques Statistiques Communauté
Préférences cookies
Corrections
irrlicht
irrklang
irredit
irrxml
Propulsé par Django
xhtml 1.0
css 2.1
884 membres
1440 sujets
11337 messages
Dernier membre inscrit: Saidov17
239 invités en ligne
membre en ligne: -
RSS Feed