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

OpenGL Discussion :

précision avec glUniformXv


Sujet :

OpenGL

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    128
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 128
    Points : 146
    Points
    146
    Par défaut précision avec glUniformXv
    Bonjour,
    juste pour être sur, avec les fonctions glUniformXtv() comme par exemple glUniform3fv():
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void glUniform3fv(GLint location, GLsizei count, const GLfloat *value);
    si j'ai par exemple count = 10, je vais bien devoir avoir value de type GLfloat value[10 * 3] ?

  2. #2
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 859
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 859
    Points : 218 579
    Points
    218 579
    Billets dans le blog
    120
    Par défaut
    Bonjour,

    C'est la question que je me pose à chaque fois.
    Comme toujours ( surement parce que je ne suis pas bon en anglais ) la doc me semble ambigüe:
    Specifies the number of elements that are to be modified. This should be 1 if the targeted uniform variable is not an array, and 1 or more if it is an array.
    Mais, de mémoire pour une autre fonction, et pour la dernière partie de la description, cela prend le nombre d'élements. Et pour le cas de glUniform3fv un élément, c'est 3 floats.
    Donc si on met 10 pour 'count' il faut bien 10 * 3 floats dans le tableau.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  3. #3
    Membre éclairé Avatar de AuraHxC
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2006
    Messages
    652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2006
    Messages : 652
    Points : 683
    Points
    683
    Par défaut
    C'est assez simple en fait c'est le nombre de groupe de donnée que tu veux envoyer.
    Disons que tu veux envoyer un vecteur tu fais par exemple glUniform3fv(id, 1, vec); pour un vec3 de float (glm c'est un vec3).
    Mais si tu veux envoyer un tableau de vecteurs du genre :
    uniform vec3 vecteurs[2]; /* partie GLSL */
    float vecs[2][3] =
    {
    {0.8, 2.1, 1.3},
    {1.9, 3.2, 1.7}
    }; /* partie API OpenGL */

    Tu feras un : glUniform3fv(id, 2, vecs); tu envoie donc tes deux vecteurs.

  4. #4
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 859
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 859
    Points : 218 579
    Points
    218 579
    Billets dans le blog
    120
    Par défaut
    Citation Envoyé par AuraHxC Voir le message
    C'est assez simple en fait c'est le nombre de groupe de donnée que tu veux envoyer.
    Bah oui ... mais le probème, c'est que j'utilise des fonctions telles que malloc / write qui demande les vrais nombres d'octets écrit. Mais cela n'a rien à voir, du tout .
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    128
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 128
    Points : 146
    Points
    146
    Par défaut
    C'est vrai que d'un point de vue haut niveau on s'attend plutôt à avoir un type GLfloat ** sauf que le prototype de la fonction souhaite un type GLfloat *.

    Or si on fait un truc du genre (GLfloat *)vecs pour transtyper notre tableau ça marchera pas dans tous les cas, par exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
        GLfloat **ptr;
        GLfloat * mat1 = some_matrix;
        GLfloat * mat2 = another_matrix;
        ptr[0] = mat1;
        ptr[1] = mat2;
        glUniformMatrix4fv(ID, 2, GL_FLASE, (GLfloat *)ptr);
    donc là il faut utiliser bcopy() ou alors prévoir de cette façon, en sens inverse:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
        GLfloat ptr[4 * 4 * 2] = {
          0.8, 2.1, 1.3, ...,
          1.9, 3.2, 1.7, ...,
        };
        GLfloat * mat1 = &(ptr[0]);
        GLfloat * mat2 = &(ptr[4*4*1]);
        glUniformMatrix4fv(ID, 2, GL_FLASE, ptr);
    En fait c'était là le sens de ma question, je ne comprenais pas trop pourquoi le type était (GLfloat *) et non (GLfloat **), donc je me demandais s'il y avait quelque chose que je n'avais pas compris.

Discussions similaires

  1. Réponses: 3
    Dernier message: 01/08/2007, 12h49
  2. Problème de précision avec BigDecimal
    Par Iris12 dans le forum API standards et tierces
    Réponses: 4
    Dernier message: 10/05/2007, 16h14
  3. Réponses: 5
    Dernier message: 11/05/2006, 08h51
  4. Problème étrange de précision avec double
    Par titoine1978 dans le forum DirectX
    Réponses: 4
    Dernier message: 22/02/2006, 09h26
  5. Problème de précision avec FloatToStr
    Par Clorish dans le forum Langage
    Réponses: 9
    Dernier message: 06/12/2005, 15h38

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