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

C++ Discussion :

Pointeur d'un tableau ou bien un vecteur ?


Sujet :

C++

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2016
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2016
    Messages : 39
    Points : 31
    Points
    31
    Par défaut Pointeur d'un tableau ou bien un vecteur ?
    Bonjour

    Je suis en ce moment en train de concevoir un logiciel type "viewer 3D" permettant de charger des fichiers 3d comme le .obj ou encore le .stl.
    Celui-ci fonctionne très bien avec des objets allant jusqu'à quelques milliers de vertex mais au delà de ça, le programme commence à souffrir : 20fps pour 125K de vertex ce qui n'est pas suffisant.

    Ceci est dut je pense à la manière dont je stocke les informations sur les vertex (position, couleur, normal, coordonné de texture). En effet, j'utilise actuellement des std::vector pour les stocker par souci de facilité mais serait-il plus judicieux d'utiliser un pointeur de vertex pointant vers un tableau de vertex ?

    Voilà, j'espère que ceci suffira pour que l'on comprenne mon problème

    Merci

    Antoine MARTIN

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    Salut,

    Vu que std::vector est un tableau... ce que tu dis n'a pas grand sens.
    Cela dit, sans aucun code, difficile de voir ce que tu fais ou fais mal.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2016
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2016
    Messages : 39
    Points : 31
    Points
    31
    Par défaut
    Merci pour ta réponse Bousk

    En effet, un std::vector est un tableau mais dynamique et je me demande si cela ne le rend-il pas plus gourmand en temps pour des opérations comme le copier vers un autre vecteur par rapport a un tableau de taille constante (on dit static ??)

    En ce qui concerne le code, il est vrai que ce serai mieux avec mais je ne vais tout de même pas balancer 2000 lignes de code sur le site non ?

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    Pourquoi voudrais-tu copier ton tableau sous prétexte qu'il est un vector ?
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  5. #5
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 614
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 614
    Points : 30 626
    Points
    30 626
    Par défaut
    Salut,
    Citation Envoyé par martantoine Voir le message
    Merci pour ta réponse Bousk

    En ce qui concerne le code, il est vrai que ce serai mieux avec mais je ne vais tout de même pas balancer 2000 lignes de code sur le site non ?
    Non, sans doute pas...

    Mais tu peux aussi ouvrir un compte github (ou autre) gratuit, et nous en donner le lien, comme cela, ceux qui auront le courage de regarder le code pourront le faire

    En plus, cela pourra sans doute te faciliter énormément la vie par la suite, quand tu commenceras à vouloir modifier des trucs à gauche ou à droite pour "essayer": un bon gestionnaire de versions concurrente, ca permet de revenir "facilement" à une version qui fonctionnait une fois que l'on a "tout cassé"

    Et puis, deux mille lignes de code, c'est pas encore grand chose
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  6. #6
    Membre éprouvé
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Mai 2016
    Messages
    313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2016
    Messages : 313
    Points : 1 237
    Points
    1 237
    Par défaut
    martantoine:

    J'ai développé mon viewer 3d à partir de Vtk, dont les structures de données sont optimisées pour les performances et la compacité, et il y a un chapitre de la doc consacré à ce sujet.
    Même si tu veux vraiment développer un viewer 3d en partant de zéro, ce qui a aussi un intérêt pédagogique, tu peux aller jeter un oeil à la doc et au code source de cette bibliothèque.

    https://www.vtk.org/

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2016
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2016
    Messages : 39
    Points : 31
    Points
    31
    Par défaut
    Merci à tous pour vos réponses !

    Pourquoi voudrais-tu copier ton tableau sous prétexte qu'il est un vector ?
    A chaque fois que je veux dessiner un mesh, j'envoi les informations de celui-ci vers un objet renderer.
    Le problème étant que ce transit d'informations était trop lourd. Or je pensais que la baisse de performance était causée par le fait que je copiais le std::vector à chaque fois au lieu de tout simplement passer l'adresse... tout bête mais bon
    Malgré cela, j'aimerai savoir qui est-ce qui prend le plus de mémoire entre un pointeur de tableau et un std::vector ?

    Aussi koala01, en effet github à l'air d'être un très bon moyen de communiquer du code

    Enfin wolinn merci pour le lien ça me sera très utile

  8. #8
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    Citation Envoyé par martantoine Voir le message
    Malgré cela, j'aimerai savoir qui est-ce qui prend le plus de mémoire entre un pointeur de tableau et un std::vector ?
    Ta question n'a pas grand sens, sauf à montrer que tu ne connais pas la STD.
    Je le répète : vector est un tableau.
    Quant à envoyer la copie du vector... c'est juste que ton code est mauvais et fait des copies inutiles.
    Et pour envoyer le buffer, il existe vector::data depuis C++11. Et avant ça il suffisait d'envoyer l'adresse du premier élément, puisque vector, étant un tableau, a tous ses éléments contigus.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2016
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2016
    Messages : 39
    Points : 31
    Points
    31
    Par défaut
    Ok
    Donc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    std::vector<int> a(5);
    int* p = &a[0];
    est équivalent à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    std::vector<int> a(5);
    int* p = a.data();
    ?

  10. #10
    Membre éprouvé
    Inscrit en
    Avril 2005
    Messages
    1 110
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 1 110
    Points : 937
    Points
    937
    Par défaut
    Oui, quatre fois oui, c'est équivalent, et j'ajoute begin() et front().
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    std::vector<int> a(5);
    int* p1 = a.data();
    int* p2 = &a[0];
    int* p3 = &*a.begin();
    int* p4 = &a.front();

  11. #11
    Membre éprouvé
    Inscrit en
    Avril 2005
    Messages
    1 110
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 1 110
    Points : 937
    Points
    937
    Par défaut
    Citation Envoyé par Bousk Voir le message
    Ta question n'a pas grand sens, sauf à montrer que tu ne connais pas la STL.
    Je le répète : vector est un tableau.
    Quant à envoyer la copie du vector... c'est juste que ton code est mauvais et fait des copies inutiles.
    Et pour envoyer le buffer, il existe vector::data depuis C++11. Et avant ça il suffisait d'envoyer l'adresse du premier élément, puisque vector, étant un tableau, a tous ses éléments contigus.
    Je n'aurais pas mieux dit. D'ailleurs je n'aurais pas osé le dire aussi crûment

    Cela semble assez surprenant de "jongler" en prog 3D et méconnaître une des classes les plus élémentaires du C++, std::vector.

  12. #12
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2016
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2016
    Messages : 39
    Points : 31
    Points
    31
    Par défaut
    Merci pour ta réponse camboui

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 10
    Dernier message: 31/05/2007, 15h10
  2. Réponses: 4
    Dernier message: 28/10/2005, 13h32
  3. pointeur pour un tableau 2d
    Par olive14 dans le forum C
    Réponses: 6
    Dernier message: 07/05/2005, 15h02
  4. Références et pointeurs sur un tableau
    Par smag dans le forum C++
    Réponses: 2
    Dernier message: 01/03/2005, 20h29
  5. Pointeur vers un tableau
    Par Nikos dans le forum C
    Réponses: 3
    Dernier message: 09/12/2002, 00h43

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