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

Images Discussion :

Appliquer une texture sur un icosaèdre


Sujet :

Images

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    laval
    Inscrit en
    Novembre 2013
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : laval
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2013
    Messages : 14
    Par défaut Appliquer une texture sur un icosaèdre
    Bonjour,

    je cherche comment projeter une image(comme texture) sur les faces triangulaires de l'icosaèdre avec mapping toolbox du Matlab.

    Merci

  2. #2
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 317
    Par défaut
    Je ne connais pas bien la Mapping Toolbox

    Je me suis donc amusé avec cette contribution : Texture Patch by Dirk-Jan Kroon

    Voici un début de réponse :

    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
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    phi = (1+sqrt(5))/2;
     
    VV = [
        0 -phi -1
        0 -phi -1
        0 -phi -1
        0 -phi -1
        0 -phi -1
        1 0 -phi
        phi -1 0
        0 -phi 1
        -phi -1 0
        -1 0 -phi
        1 0 -phi
        phi 1 0
        1 0 phi
        -1 0 phi
        -phi 1 0
        0 phi -1
        phi 1 0
        0 phi 1
        0 phi 1
        0 phi 1
        0 phi 1
        0 phi 1
        ];
     
    FF = [
        12 13 18
        17 22 16
        12 6 7
        17 16 11
        12 7 13
        7 6 1
        7 2 8
        7 8 13
        13 8 14
        8 3 9
        8 14 9
        13 14 19
        21 15 16
        20 14 15
        14 9 15
        16 11 10
        15 9 10
        9 4 10
        10 5 11
        15 10 16
        ];
     
    figure
    patch('vertices',VV,'faces',FF,'facecolor','r');
    hold on
    text(VV(:,1),VV(:,2),VV(:,3), num2str((1:size(VV,1)).'))
    axis equal vis3d
     
    figure
     
    TV = [
        23 1
        69 1
        115 1
        160 1
        206 1
        1 35
        45 35
        91 35
        137 35
        183 35
        228 35
        24 70
        68 70
        114 70
        160 70
        206 70
        250 70
        46 105
        92 105
        138 105
        183 105
        230 105
        ];
     
    TV(:,1) = TV(:,1)/253;
    TV(:,2) = TV(:,2)/108;
     
    TF = FF;
     
    texture = imread('wiki.png','png');
     
    texture = permute(texture,[2 1 3]);
     
    options.EdgeColor = 'none';
    options.PSize = 128;
     
    patcht(FF,VV,TF,TV,texture, options)
     
    hold on
    text(VV(:,1),VV(:,2),VV(:,3), num2str((1:size(VV,1)).'))
     
    grid on
    axis equal vis3d
     
    figure
    image(texture)
    axis image
    hold on
    plot( TV(:,2)*108,TV(:,1)*253,'r*');
     
    text(TV(:,2)*108,TV(:,1)*253, num2str((1:size(TV,1)).'))
    Le fichier wiki.png (tiré de wikipedia) est attaché ci-dessous ainsi que le résultat de son plaquage sur l'icosaèdre.
    Images attachées Images attachées   

  3. #3
    Membre averti
    Homme Profil pro
    laval
    Inscrit en
    Novembre 2013
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : laval
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2013
    Messages : 14
    Par défaut Texture de l'icosaèdre
    Bonjour,
    Je vous remercie infiniment pour la réponse, vraiment c'est une réponse très pertinente.
    Mais j'ai deux ambiguïtés : la première les vertex, j’ai vu dans le code qu’il y a 22 vertex, je ne sais pas pourquoi 22 vertex dans VV.
    La deuxième des choses est le contenu de fichier FV :
    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
    TV = [
        23 1
        69 1
        115 1
        160 1
        206 1
        1 35
        45 35
        91 35
        137 35
        183 35
        228 35
        24 70
        68 70
        114 70
        160 70
        206 70
        250 70
        46 105
        92 105
        138 105
        183 105
        230 105
        ];
    ces chiffres se sont des coordonnées ou autre chose ?.
    Pourquoi vous avez utilisé 253 et 108 dans les deux tables
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     TV(:,1) = TV(:,1)/253;
    TV(:,2) = TV(:,2)/108;
    Cordialement

  4. #4
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 317
    Par défaut
    Citation Envoyé par nouriami Voir le message
    j’ai vu dans le code qu’il y a 22 vertex, je ne sais pas pourquoi 22 vertex dans VV.
    Par ce qu'il ne faut pas prendre en considération les sommets de l'icosaèdre, mais ceux des triangles sur l'image du patron déplié.

    Il y a 12 sommets sur l'icosaèdre, mais 22 sur le patron déplié (voir l'image attachée)

    Citation Envoyé par nouriami Voir le message
    La deuxième des choses est le contenu de fichier FV :
    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
    TV = [
        23 1
        69 1
        115 1
        160 1
        206 1
        1 35
        45 35
        91 35
        137 35
        183 35
        228 35
        24 70
        68 70
        114 70
        160 70
        206 70
        250 70
        46 105
        92 105
        138 105
        183 105
        230 105
        ];
    ces chiffres se sont des coordonnées ou autre chose ?.
    Ce sont les coordonnées (approximatives) en pixels des sommets des triangles sur l'image du patron déplié

    Citation Envoyé par nouriami Voir le message
    Pourquoi vous avez utilisé 253 et 108 dans les deux tables
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     TV(:,1) = TV(:,1)/253;
    TV(:,2) = TV(:,2)/108;
    Pour ramener les coordonnées des sommets dans l’intervalle [0 1] (l'image fait 253x108 pixels)
    Ce n'est pas nécessaire selon l'aide de la fonction patcht, mais je trouve que le rendu final est meilleur.

    Au passage, il aurait été sans doute plus juste de faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    TV(:,1) = (TV(:,1)-1)/252;
    TV(:,2) = (TV(:,2)-1)/107;
    Images attachées Images attachées  

  5. #5
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 317
    Par défaut
    Voici une version simplifiée qui permet de sans doute mieux comprendre le principe :
    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
    83
    84
    phi = (1+sqrt(5))/2;
     
    VV = [
        0 -phi -1
        1 0 -phi
        phi -1 0
        0 -phi 1
        -phi -1 0
        -1 0 -phi
        phi 1 0
        1 0 phi
        -1 0 phi
        -phi 1 0
        0 phi -1
        0 phi 1
        ];
     
    FF = [
         7     8    12
         7    12    11
         7     2     3
         7    11     2
         7     3     8
         3     2     1
         3     1     4
         3     4     8
         8     4     9
         4     1     5
         4     9     5
         8     9    12
        12    10    11
        12     9    10
         9     5    10
        11     2     6
        10     5     6
         5     1     6
         6     1     2
        10     6    11
        ];
     
    r = 5;
    th = linspace(0,2*pi,4);
    th(end) = [];
     
    x = r*cos(th(:));
    y = r*sin(th(:));
     
    c = [12 12 ; 38 12 ; 38 38];
     
    TV = [ x+c(1,1) y+c(1,2) 
            x+c(2,1) y+c(2,2)
            x+c(3,1) y+c(3,2)];
     
    TF = [1 2 3
        1 2 3
        4 5 6
        7 8 9
        7 8 9
        1 2 3
        1 2 3
        4 5 6
        7 8 9
        1 2 3
        4 5 6
        1 2 3
        1 2 3
        1 2 3
        7 8 9
        4 5 6
        4 5 6
        1 2 3
        1 2 3
        7 8 9];
     
    texture = imread('d1395244-3.png');
     
    texture = permute(texture,[2 1 3]);
     
    options.PSize = 64;
     
    figure
    patcht(FF,VV,TF,TV,texture, options)
     
    axis equal vis3d off
    On notera ici que comme la texture appliquée est plus simple, moins de sommets sont nécessaires pour définir l'icosaèdre

    Le fichier d1395244-3.png et le résultat du placage de la texture sont attachés à ce message.

    Voici un autre morceau de code qui illustre le "découpage" de la texture :

    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
    texture = imread('d1395244-3.png');
     
    r = 5;
    th = linspace(0,2*pi,4);
    th(end) = [];
     
    x = r*cos(th(:));
    y = r*sin(th(:));
     
    c = [12 12 ; 38 12 ; 38 38];
     
     
    TV = [ x+c(1,1) y+c(1,2) 
            x+c(2,1) y+c(2,2)
            x+c(3,1) y+c(3,2)];
     
     
    TF = [ 1 2 3
        4 5 6
        7 8 9];
     
    figure
    image(texture)
    axis image
    hold on
    patch('vertices',TV, 'faces', TF, 'facecolor','none')
    text(TV(:,1),TV(:,2),num2str((1:size(TV,1)).'),'fontsize',18,'color','b')
    Ce qui donne la dernière image attachée.
    Les triangles sont juste présents pour visualiser les zones où la texture est prise en compte.
    Images attachées Images attachées    

  6. #6
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 317
    Par défaut
    Pour finir un exemple encore plus simple avec une "vraie" texture.


    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
    %texturefile = 'texture-crepis-b.jpg';
    texturefile = 'texture-herbe-a.jpg';
     
    phi = (1+sqrt(5))/2;
     
    VV = [
        0 -phi -1
        1 0 -phi
        phi -1 0
        0 -phi 1
        -phi -1 0
        -1 0 -phi
        phi 1 0
        1 0 phi
        -1 0 phi
        -phi 1 0
        0 phi -1
        0 phi 1
        ];
     
    FF = [
         7     8    12
         7    12    11
         7     2     3
         7    11     2
         7     3     8
         3     2     1
         3     1     4
         3     4     8
         8     4     9
         4     1     5
         4     9     5
         8     9    12
        12    10    11
        12     9    10
         9     5    10
        11     2     6
        10     5     6
         5     1     6
         6     1     2
        10     6    11
        ];
     
    r = 150;
    th = linspace(0,2*pi,4);
    th(end) = [];
     
    x = r*cos(th(:));
    y = r*sin(th(:));
     
    c = [140 140];
     
    TV = [x+c(1,1) y+c(1,2)];
     
    TF = repmat([1 2 3],size(FF,1),1);
     
    texture = imread(texturefile,'jpg');
     
    texture = permute(texture,[2 1 3]);
     
    options.PSize = 200;
     
    figure
    patcht(FF,VV,TF,TV,texture, options)
     
    axis equal vis3d off
    Les fichiers de textures peuvent être téléchargés sur Museum Texture (ou autres)
    Images attachées Images attachées   

  7. #7
    Membre averti
    Homme Profil pro
    laval
    Inscrit en
    Novembre 2013
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : laval
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2013
    Messages : 14
    Par défaut texture de l'icosaèdre
    Je vous remercie infiniment encore pour vos efforts.
    La texture avec des images simples sa marche, mais avec la carte du monde (*.jpg) je trouve que l'habillage de l'icosaèdre ne se fait pas bien. Il y a un chevauchement entre les continents, ainsi il y a une genre de dilatation dans certaines parties.
    avec des images simple(texture par exemple) on peut pas détecter le problème, par contre avec des cartes ou d'autres choses on peut le distinguer.
    ci-joint l'image que je l'utilise dans mes travaux.
    Merci

    Noureddine
    Images attachées Images attachées  

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 25/01/2012, 09h58
  2. Appliquer une texture sur un cercle
    Par bakman dans le forum ActionScript 3
    Réponses: 0
    Dernier message: 01/07/2010, 14h24
  3. appliquer une texture sur une grille
    Par franc82 dans le forum OpenGL
    Réponses: 6
    Dernier message: 02/03/2007, 16h17
  4. Réponses: 5
    Dernier message: 18/09/2004, 21h30
  5. [icone]Comment appliquer une icone sur le.exe
    Par JavaLeDirePartout dans le forum JBuilder
    Réponses: 7
    Dernier message: 24/07/2003, 17h28

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