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 :

Simulation Rasterization pipeline


Sujet :

OpenGL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 32
    Par défaut Simulation Rasterization pipeline
    Bonjour à tous,
    Dans le cadre de mes études, je dois simuler le pipeline de rasterization d'openGL. Je travailles en 2d, sur le plan (x,z). Pour faire simple, j'ai un simple modèle 2D (un cercle dans un rectangle). Pour afficher ce modèle au milieu de mon buffer, je translate et scale chaque point. Ma caméra est placée à l'origine du repère (0, 0) et regarde sur l'axe -z.
    Je dois utiliser une projection perspective pour afficher ce que ma caméra voit dans un autre buffer. Voici ce que je fais pour l'instant (avec des points 2D en coordonnées homogènes):

    -1: mon modèle est stocké en coordonnée réelle (i.e: par exemple mon rectangle est (-2,-1), (-2, 1), (2, 1), (2, -1)
    -2: avant d'afficher les points, je les scales et translate.
    -3: j'affiche les points et dessine les lignes
    -4: je défini une matrice de projection avec:
    - near plan = -1
    - left = -1
    - right = 1
    - far = -7

    Je dois maintenant pouvoir projeter les points dans un autre buffer, mais je n'ai aucune idée comment faire.
    L'idée est de tous faire à la main sans utiliser les fonctions fournis par glut.

    Merci d'avance pour votre aide,

    Cordialement

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


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

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 150
    Billets dans le blog
    150
    Par défaut
    Bonjour,

    Je n'ai pas vraiment compris où était votre question.
    Vous n'arrivez pas à appliquer les transformations?
    Ou alors, vous ne savez pas quels pixels colorés?

    Pour le premier, vous devez faire:
    Point_de_départ * MatriceModèleVueProjection.

    Puis une projection avec le viewport.

    Pour le deuxième, vous devez déterminer si le point est dans le triangle.
    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 averti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 32
    Par défaut
    Bonjour,
    Merci de votre réponse. Pouvez vous préciser ce que vous entendez par MatriceModèleVueProjection ?

    Si j'ai bien compris, ma matrice de projection "transforme" mon frustrum en carré (-1,1) (1,-1) (1, 1) (-1, -1). Ce qui veux dire que tous ce qui se trouve dans le frustrum se retrouve dans le carré. J'applique la projection sur chacun de mes points et les redessine dans un autre buffer.

    Cordialement

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


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

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 150
    Billets dans le blog
    150
    Par défaut
    La Matrice Modèle Vue Projection (MVP) permet de transformer un point 3D, en point homogène (dans l'espace (-1,-1) (1,1)).
    Le viewport, permettra te transformer le point homogène de l'espace homogène à l'espace écran (soit (0,0) (largeur,hauteur))

    Et sinon, vous semblez avoir bien compris.
    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 averti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 32
    Par défaut
    Bonjour, et merci pour votre aide.

    J'en suis a la parti ou il faut que je clip mes segments dans mon carré canonique (-1, -1), (1, -1), (-1, 1), (1, 1). J'ai appliqué ma matrice de projection a mes points (x,z,w) (je travailles sur l'axe x,z mais dans mon code, les points sont gérés de manière classique, x,y et z pour l'homogénéité). Voici mon code pour l'instant:

    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
     
    typedef int OutCode;
     
    const int INSIDE = 0; // 0000
    const int LEFT = 1;   // 0001
    const int RIGHT = 2;  // 0010
    const int BOTTOM = 4; // 0100
    const int TOP = 8;    // 1000
     
    OutCode ComputeOutCode(vec3 p) //vec3 est un point (x,z,w)
    {
            OutCode code;
     
            code = INSIDE;          // initialised as being inside of clip window
     
    	if (p.z+p.x < 0)           // to the left of clip window
                    code |= LEFT;
            else if (p.z - p.x < 0)      // to the right of clip window
                    code |= RIGHT;
            if (p.z + p.y < 0)           // below the clip window
                    code |= TOP;
            else if (p.z - p.y < 0)      // above the clip window
                    code |= BOTTOM;
            return code;
    }
     
    void CohenSutherlandLineClipAndDraw(vec3 a, vec3 b)
    {
     
    	int aOutCode = ComputeOutCode(a);
    	int bOutCode = ComputeOutCode(b);
     
    	if((aOutCode & bOutCode)!= 0)//reject line
    		cout << "rejected" <<endl;	
    	if((aOutCode | bOutCode) == 0)//accepted line
    		cout << "accepted" <<endl;
     
    }
    Je fait pour l'instant les tests basiques: segment accepté, segment rejeté, mais j'ai des difficultés à comprendre comment gérer le reste du code.

    Merci de votre aide,

    Cordialement

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


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

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 150
    Billets dans le blog
    150
    Par défaut
    Citation Envoyé par kosa_nostra Voir le message
    Je fait pour l'instant les tests basiques: segment accepté, segment rejeté, mais j'ai des difficultés à comprendre comment gérer le reste du code.
    C'est quoi le reste du code? Que cherchez vous à faire?
    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.

Discussions similaires

  1. Probleme Voyageur de Commerce - Recuit Simulé
    Par dinver dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 21/06/2009, 22h26
  2. Développpement d'une application de simulation .....
    Par dada5455 dans le forum OpenGL
    Réponses: 6
    Dernier message: 14/12/2003, 10h27
  3. simuler l'execution d'un message
    Par gaut dans le forum C
    Réponses: 14
    Dernier message: 24/07/2003, 23h01
  4. Simuler un coup de molette sur un memo...
    Par dynobremo dans le forum Composants VCL
    Réponses: 2
    Dernier message: 28/02/2003, 11h31
  5. Simulation de transmission de paquet entre différent réseaux
    Par MelloW dans le forum Développement
    Réponses: 2
    Dernier message: 12/07/2002, 19h51

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