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

Développement 2D, 3D et Jeux Discussion :

projection perspective de l'image 2d sur un plan 3d


Sujet :

Développement 2D, 3D et Jeux

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Femme Profil pro
    Étudiant
    Inscrit en
    Septembre 2007
    Messages
    610
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2007
    Messages : 610
    Par défaut projection perspective de l'image 2d sur un plan 3d
    bonjour,
    D'abord il faut signaler que je suis débutante dans ces domaines (traitement d'image , synthèse d'image)donc ça se peut que mes questions seront banales.
    mon projet est dans le cadre de traitement d'image mais j'ai trouvé dans un article cette paragraphe
    Forward warpings can be achieved by applying the texture
    image to the surface and then generating a raster
    graphics rendering of a texture mapped model. This approach
    has the added advantage of visibility testing; only
    the forward-facing portion of the model will be rendered.
    In practice, the surface is approximated by a 3D triangle
    mesh. The warped image is then computed via Z-buffered
    rendering of the triangular mesh with bilinear resampling
    of the texture map. By defining image warping in this way,
    it is possible to harness hardware accelerated triangle texture
    mapping capabilities becoming prevalent in mid-end
    workstations, PC's, and computer game consoles.
    je ne comprends pas bien l'anglais mais j'ai comprends qu'il parle sur une placage d'une texture (mais j'ai pas comprendre pourquoi il a fait la triangulation et a utilisé Z buffer )? .
    2-je voudrais connaitre comment faire pour plaquer une image 2D sur un cylindre 3d. je sais qu'il faut faire une projection perspective de l'image sur la cylindre . mais la résultat de ce plaquage il faut devient comme l'image.
    j'ai pas pu comprendre comment faire ça. auriez vous une idée comment faire ça ( les étapes c'est tout) .
    Images attachées Images attachées  

  2. #2
    Expert confirmé
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 532
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 532
    Par défaut
    Salut,

    Citation Envoyé par dreamVIG Voir le message
    je ne comprends pas bien l'anglais mais j'ai comprends qu'il parle sur une placage d'une texture (mais j'ai pas comprendre pourquoi il a fait la triangulation et a utilisé Z buffer )? .
    je ne sais pas quelles sont tes connaissances en 3d mais le triangle3d c'est la primitive de base.
    Ainsi pour obtenir un quadrilatère en 3d plan il faut créer 2 triangles,les positionner dans l'espace par le coté opposé pour former un plan 3d.
    Le Z-buffer sert à mémoriser les triangles 3d , et les trier afin d'afficher d'abord ceux qui apparaissent en premier plan puis ceux qui apparaissent après.


    Citation Envoyé par dreamVIG Voir le message
    2-je voudrais connaitre comment faire pour plaquer une image 2D sur un cylindre 3d. je sais qu'il faut faire une projection perspective de l'image sur la cylindre . mais la résultat de ce plaquage il faut devient comme l'image.
    j'ai pas pu comprendre comment faire ça. auriez vous une idée comment faire ça ( les étapes c'est tout) .
    Prendre le SDK de Direct X par exemple
    \Samples\C++\Direct3D\Tutorials\Tut05_Textures

    je fais un petit copier-coller
    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
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
     
     
    //-----------------------------------------------------------------------------
    // Global variables
    //-----------------------------------------------------------------------------
    LPDIRECT3D9             g_pD3D       = NULL; // Used to create the D3DDevice
    LPDIRECT3DDEVICE9       g_pd3dDevice = NULL; // Our rendering device
    LPDIRECT3DVERTEXBUFFER9 g_pVB        = NULL; // Buffer to hold vertices
    LPDIRECT3DTEXTURE9      g_pTexture   = NULL; // Our texture
     
    // A structure for our custom vertex type. We added texture coordinates
    struct CUSTOMVERTEX
    {
        D3DXVECTOR3 position; // The position
        D3DCOLOR    color;    // The color
    #ifndef SHOW_HOW_TO_USE_TCI
        FLOAT       tu, tv;   // The texture coordinates
    #endif
    };
     
    // Our custom FVF, which describes our custom vertex structure
    #ifdef SHOW_HOW_TO_USE_TCI
    #define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZ|D3DFVF_DIFFUSE)
    #else
    #define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZ|D3DFVF_DIFFUSE|D3DFVF_TEX1)
    #endif
     
     
     
     
    //-----------------------------------------------------------------------------
    // Name: InitGeometry()
    // Desc: Create the textures and vertex buffers
    //-----------------------------------------------------------------------------
    HRESULT InitGeometry()
    {
        // Use D3DX to create a texture from a file based image
        if( FAILED( D3DXCreateTextureFromFile( g_pd3dDevice, L"banana.bmp", &g_pTexture ) ) )
        {
            // If texture is not in current folder, try parent folder
            if( FAILED( D3DXCreateTextureFromFile( g_pd3dDevice, L"..\\banana.bmp", &g_pTexture ) ) )
            {
                MessageBox(NULL, L"Could not find banana.bmp", L"Textures.exe", MB_OK);
                return E_FAIL;
            }
        }
     
        // Create the vertex buffer.
        if( FAILED( g_pd3dDevice->CreateVertexBuffer( 50*2*sizeof(CUSTOMVERTEX),
                                                      0, D3DFVF_CUSTOMVERTEX,
                                                      D3DPOOL_DEFAULT, &g_pVB, NULL ) ) )
        {
            return E_FAIL;
        }
     
        // Fill the vertex buffer. We are setting the tu and tv texture
        // coordinates, which range from 0.0 to 1.0
        CUSTOMVERTEX* pVertices;
        if( FAILED( g_pVB->Lock( 0, 0, (void**)&pVertices, 0 ) ) )
            return E_FAIL;
        for( DWORD i=0; i<50; i++ )
        {
            FLOAT theta = (2*D3DX_PI*i)/(50-1);
     
            pVertices[2*i+0].position = D3DXVECTOR3( sinf(theta),-1.0f, cosf(theta) );
            pVertices[2*i+0].color    = 0xffffffff;
    #ifndef SHOW_HOW_TO_USE_TCI
            pVertices[2*i+0].tu       = ((FLOAT)i)/(50-1);
            pVertices[2*i+0].tv       = 1.0f;
    #endif
     
            pVertices[2*i+1].position = D3DXVECTOR3( sinf(theta), 1.0f, cosf(theta) );
            pVertices[2*i+1].color    = 0xff808080;
    #ifndef SHOW_HOW_TO_USE_TCI
            pVertices[2*i+1].tu       = ((FLOAT)i)/(50-1);
            pVertices[2*i+1].tv       = 0.0f;
    #endif
        }
        g_pVB->Unlock();
     
        return S_OK;
    }
    Pour Open GL chercher dans Google : nehe Open GL tutorials .
    Mais je crois que quelqu'un ici les a traduits

    Sinon selon l'API de rendu que tu utilises ( Open GL ou Direct X) il faut créer basiquement 2 triangles 3d, les positionner dans l'espace pour qu'il soient reliés afin de créer un plan comme je l'ai écris précedemment.
    Ensuite si tu sais créer un plan 3d alors il faut en créer plusieurs pour créer un cylindre , les transformations trigonométriques permettent cela.
    Ensuite il savoir plaquer judicieusement la texture

  3. #3
    Membre éclairé
    Femme Profil pro
    Étudiant
    Inscrit en
    Septembre 2007
    Messages
    610
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2007
    Messages : 610
    Par défaut
    bon, premièrement merci pour votre explication qui est excellente
    alors si j'ai compris bien qu'est ce que vous avez dis
    1- les triangulations ce sont pour construire la cylindre ?
    2- vous voudrez dire que la texture c'est l'image du visage et la cylindre c'est l'objet ?

    j'ai travaillé un peu avec opengl et j'ai plaquer quelque texture mais j'ai les plaqués sur des images synthétisées où moi qui j'ai construits ces images et les texture ce sont des images quelconque est pas des visage ( par exemple j'ai dessiner un cube par opengl ensuite j'ai plaqué la texture ) et quand j'ai appliqué ces textures je n'ai pas vu l'objet j'ai vu que la texture sur l'objet mais dans cette cas nous voyons les deux

  4. #4
    Expert confirmé
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 532
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 532
    Par défaut
    Citation Envoyé par dreamVIG Voir le message
    bon, premièrement merci pour votre explication qui est excellente
    merci dreamVIG je ne suis pas un grand expert de la 3d mais cela fait plaisir
    alors si j'ai compris bien qu'est ce que vous avez dis
    1- les triangulations ce sont pour construire la cylindre ?
    2- vous voudrez dire que la texture c'est l'image du visage et la cylindre c'est l'objet ?
    oui tout à fait.
    La texture c'est une image ( .bmp,.jpg) il faut s'arranger pour la plaquer sur des plans 3d.
    Ces plans 3d sont l'associations de 2 triangles

    et quand j'ai appliqué ces textures je n'ai pas vu l'objet j'ai vu que la texture sur l'objet mais dans cette cas nous voyons les deux
    Si l'objet est mal dessiné soit les facettes sont mal éclairées,soit le tri de ces facettes et des sommets ( faces -vertices en anglais ) est mal fait dans le Z-buffer

  5. #5
    Membre éclairé
    Femme Profil pro
    Étudiant
    Inscrit en
    Septembre 2007
    Messages
    610
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2007
    Messages : 610
    Par défaut
    bonsoir,
    mais vraiment Mat.M après la lecture de votre réponse j'ai compris des informations que j'avais des ambiguïtés depuis un mois
    (je pensais que le visage (image de texture) est un maillage triangulaire et n'est pas la cylindre je pensais aussi que qand applique la texture le résultat sera come l'image en dessous ) il me reste un petit question :
    alors les étapes sont les suivants :
    1-construction d'une cylindre 3d avec opengl ou un directx ( cette cylindre il faut qu'elle est construite par des triangles)
    2-on applique la texture après les déformations pour la rendre applicable sur la cylindre ce placage est une projection perspective de la texture sur la cylindre
    3- enfin on fait le rendu par la technique de Z-buffer
    je voudrais savoir est ce sont les étapes ou il existe d'autre étapes (a part la détection de la région de visage )
    Images attachées Images attachées  

  6. #6
    Expert confirmé
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 532
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 532
    Par défaut
    Citation Envoyé par dreamVIG Voir le message
    je voudrais savoir est ce sont les étapes ou il existe d'autre étapes (a part la détection de la région de visage )
    salut je ne comprends pas très bien ; une image/texture représentant un visage c'est comme une photo c'est plat et plan.
    Pour placer cette image 2d sur un cylindre , il faut d'abord subdiviser le cylindre en nombre de facettes ; plus il y a de facettes plus le cylindre donnera l'impression d'être circulaire.
    Il faut faire cette subdivision en fonction de la hauteur et largeur de l'image représentant le visage.
    Par contre je ne comprends pas ce que tu veux dire par détection de la région du visage.

Discussions similaires

  1. Projection d'un ellipsoïde sur le plan image
    Par studentTun dans le forum Mathématiques
    Réponses: 2
    Dernier message: 03/05/2013, 14h54
  2. projection des quadriques sur les plan images
    Par studentTun dans le forum Développement 2D, 3D et Jeux
    Réponses: 0
    Dernier message: 03/05/2013, 01h57
  3. Projection image smartphone sur PC
    Par achiou59 dans le forum Android
    Réponses: 2
    Dernier message: 07/12/2011, 15h54
  4. [Servlet] [Image] Dessiner sur une image
    Par gaia_dev dans le forum 2D
    Réponses: 5
    Dernier message: 01/09/2004, 17h11
  5. [Servlet][Deb]envoyer image gif sur le flux http
    Par ptitBoutchou dans le forum Servlets/JSP
    Réponses: 15
    Dernier message: 09/04/2004, 10h12

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