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

Mathématiques Discussion :

Algorithme surface de Bézier


Sujet :

Mathématiques

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Novembre 2012
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 12
    Points : 6
    Points
    6
    Par défaut Algorithme surface de Bézier
    Bonjour à tous !

    Je travaille sur une application qui doit être projetée sur un écran cylindrique. En conséquence, je dois programmer une déformation d'image car pour avoir une image rectangulaire sur l'écran cylindrique, je dois la déformer en amont.

    Ma méthode est de faire un render to texture de ma scène sur un quad et de jouer avec les UV de la texture dans un fragment shader.

    Je fais donc un shader qui va déformer une texture à partir de points de contrôle. Pour le moment, j'ai simplement 9 points de contrôle.

    Pour avoir une déformation continue, je veux interpoler mes UV avec une surface de Bézier.
    J'ai fait mon shader mais je n'obtiens pas la bonne déformation. Je sais que je me plante quelque part dans le calcul mathématique mais seul, j'ai du mal à trouver où...

    Voici le shader :


    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
    uniform sampler2D texture;
    uniform float ctrlPts[18]; //   P(0,0).x / P(0,0).y / P(1,0).x / P(1,0).y / ... / P(2,2).x / P(2,2).y
     
    //Calcule n!
    int factorial(int n){
        if(n==0)
            return 1;
     
        int result=n;
        int etape=n;
        while(etape!=1){
            etape--;
            result*=etape;
        }
        return result;
    }
     
    //Calcule le coefficient binomial (i,n)
    int binomialCoefficient(int i, int n){
        return factorial(n)/(factorial(i)*factorial(n-i));
    }
     
    //Calcule le polynôme de Bernstein Bi,n(u)
    float bernstein(int i, int n, float u){
        return binomialCoefficient(i,n)*pow(u,(float)i)*pow((1-u),(float)(n-i));
    }
     
    //******************************************************************************
    //MAIN
    //******************************************************************************
    void main(){    
     
        vec2 TexCoord = vec2(gl_TexCoord[0]);
     
        //SURFACE BEZIER
     
        vec2 result=vec2(0,0);
        vec2 somme;
        for(int i=0 ; i<=2 ; i++)
        {
            somme=vec2(0,0);
            for(int j=0 ; j<=2 ; j++)
            {
                vec2 Pij= vec2(ctrlPts[j*6+2*i],ctrlPts[j*6+2*i+1]);
                somme+=Pij*bernstein(i, 2, TexCoord.x)*bernstein(j, 2, TexCoord.y);
            }
            result+=somme;
        }
     
        TexCoord=result;
     
        // Sampling The Texture And Passing It To The Frame Buffer
        gl_FragColor = texture2D(texture, TexCoord);
    }

    Je continue de chercher mon erreur mais votre aide est la bienvenue.
    Merci d'avance

  2. #2
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Novembre 2012
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 12
    Points : 6
    Points
    6
    Par défaut
    Erreur trouvée, le code marche, c'était une erreur d'étourderie ailleurs dans le code... :mrgreen

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

Discussions similaires

  1. Surface de Bézier GLSL
    Par MrVylsain dans le forum OpenGL
    Réponses: 1
    Dernier message: 13/11/2012, 09h14
  2. Surface de Bézier
    Par asmaeH dans le forum Déploiement/Installation
    Réponses: 3
    Dernier message: 02/07/2012, 10h00
  3. ALGORITHME: Surface triangulaire = Petit PB
    Par megs dans le forum Langage
    Réponses: 7
    Dernier message: 01/03/2012, 09h09
  4. algorithme de construction de surfaces
    Par wawa.voun dans le forum Développement 2D, 3D et Jeux
    Réponses: 2
    Dernier message: 14/01/2008, 17h26
  5. [Surfaces] Carreaux de bézier
    Par bigquick dans le forum OpenGL
    Réponses: 5
    Dernier message: 23/07/2006, 23h12

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