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

Unity Discussion :

Conversion tableau image


Sujet :

Unity

  1. #21
    Membre averti
    Avatar de anadoncamille
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2007
    Messages
    395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2007
    Messages : 395
    Points : 310
    Points
    310
    Billets dans le blog
    1
    Par défaut
    Je veux bien utiliser un shader si cela peut résoudre mon problème, mais je ne sais pas du tout comment faire. Quelle est la procédure à suivre ?
    __________________________________
    | +
    | Sylvain Tournois - Création logicielle
    |
    | sylv.tournois.free.fr
    |

  2. #22
    Membre confirmé
    Homme Profil pro
    Développeur multiplateformes
    Inscrit en
    Mars 2003
    Messages
    273
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur multiplateformes
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2003
    Messages : 273
    Points : 628
    Points
    628
    Par défaut
    Citation Envoyé par Kannagi Voir le message
    Je suis pas sur là , il faudra un shader complexe pour faire ce genre de truc , techniquement je suis pas sur que le faire via Unity soit la meilleur solution.
    J'aurais proposer SDL2 , tu fait tout en software , et tu envoie au GPU à la fin
    Bonjour Kannagi,

    Il faut afficher l'évolution de la scène en temps réel…
    Pour aller plus vite l'autre solution serait effectivement de passer en C++ sur des environnements vectoriels comme SDL2 sous Visual C++ ou Builder C++ sous FMX (Embarcadero) qui est assez simple à mettre en œuvre (version de base gratuite mais Windows uniquement, le multiplateforme n'est pas au point).
    Cependant j'aurais tendance à penser comme Bousk qu'il y aura sans doute plus à gratter en cherchant du coté des méthodes d'affichage sur Unity.
    A voir.

    Yves

  3. #23
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    Oui le shader sera plus compliqué, mais si on veut vraiment un truc performant on peut rarement se contenter de simplicité.
    Un bon compromis serait d'avoir tout en CPU. Tout étant un simple tableau de bool pour savoir si la case est allumée ou éteinte.
    Puis on balance ça au GPU, et un shader allume ou éteint chaque pixel sur une texture de base - et là c'est un shader assez trivial.
    Mais j'utiliserais jamais Unity pour ça : avec C++/SFML ce serait plié en 2h. Et ce sera multiplateforme automatiquement via SFML (donc toutes les plateformes que SFML supporte) vu que SFML utilise OpenGL, et il n'y a absolument aucun code spécifique plateforme à utiliser de mon bord.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  4. #24
    Membre averti
    Avatar de anadoncamille
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2007
    Messages
    395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2007
    Messages : 395
    Points : 310
    Points
    310
    Billets dans le blog
    1
    Par défaut
    N'y a-t-il aucun moyen de faire tout ça via Unity et le C# ?
    __________________________________
    | +
    | Sylvain Tournois - Création logicielle
    |
    | sylv.tournois.free.fr
    |

  5. #25
    Expert éminent sénior
    Avatar de Kannagi
    Homme Profil pro
    cyber-paléontologue
    Inscrit en
    Mai 2010
    Messages
    3 214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cyber-paléontologue

    Informations forums :
    Inscription : Mai 2010
    Messages : 3 214
    Points : 10 140
    Points
    10 140
    Par défaut
    Citation Envoyé par Bousk Voir le message
    Oui le shader sera plus compliqué, mais si on veut vraiment un truc performant on peut rarement se contenter de simplicité.
    Un bon compromis serait d'avoir tout en CPU. Tout étant un simple tableau de bool pour savoir si la case est allumée ou éteinte.
    Puis on balance ça au GPU, et un shader allume ou éteint chaque pixel sur une texture de base - et là c'est un shader assez trivial.
    Mais j'utiliserais jamais Unity pour ça : avec C++/SFML ce serait plié en 2h. Et ce sera multiplateforme automatiquement via SFML (donc toutes les plateformes que SFML supporte) vu que SFML utilise OpenGL, et il n'y a absolument aucun code spécifique plateforme à utiliser de mon bord.
    Je suis d'accord mais !
    Ecrire sur un tableau bit par bit , puis envoyé ce tableau aux shader qui va devoir faire des cmp , bof

    Techniquement à la place du bit allumé/éteint , on peut écrire un pixel 1 byte (ou sur 2 bytes à la limite pour avoir de la couleur ) et envoyé tout simplement la texture , je suis pas sur que ça changerai des masses niveau perf

  6. #26
    Membre averti
    Avatar de anadoncamille
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2007
    Messages
    395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2007
    Messages : 395
    Points : 310
    Points
    310
    Billets dans le blog
    1
    Par défaut
    J'ai une question : que signifie la mise entre < et > ? Par exemple ici, Color32 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var data = texture.GetRawTextureData<Color32>();
    Je ne trouve aucune documentation à ce sujet.
    __________________________________
    | +
    | Sylvain Tournois - Création logicielle
    |
    | sylv.tournois.free.fr
    |

  7. #27
    Membre confirmé
    Homme Profil pro
    Développeur multiplateformes
    Inscrit en
    Mars 2003
    Messages
    273
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur multiplateformes
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2003
    Messages : 273
    Points : 628
    Points
    628
    Par défaut
    Citation Envoyé par anadoncamille Voir le message
    J'ai une question : que signifie la mise entre < et > ? Par exemple ici, Color32 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var data = texture.GetRawTextureData<Color32>();
    Je ne trouve aucune documentation à ce sujet.
    C'est le type de la propriété recherchée qui passé à la fonction.
    Color32 correspond aux octets rouge, vert, bleu et alpha pour la transparence.

    Yves

  8. #28
    Membre averti
    Avatar de anadoncamille
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2007
    Messages
    395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2007
    Messages : 395
    Points : 310
    Points
    310
    Billets dans le blog
    1
    Par défaut
    Merci pour la réponse. Si je comprends bien, c'est une façon de passer un paramètre, ici un type. C'est bien ça ?
    __________________________________
    | +
    | Sylvain Tournois - Création logicielle
    |
    | sylv.tournois.free.fr
    |

  9. #29
    Membre confirmé
    Homme Profil pro
    Développeur multiplateformes
    Inscrit en
    Mars 2003
    Messages
    273
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur multiplateformes
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2003
    Messages : 273
    Points : 628
    Points
    628
    Par défaut
    Citation Envoyé par anadoncamille Voir le message
    Merci pour la réponse. Si je comprends bien, c'est une façon de passer un paramètre, ici un type. C'est bien ça ?
    C'est la façon de passer le type attendu pour le retour de la fonction.
    Les paramètres étant par ailleurs classiquement passés entre parenthèse quand il y en a.

    Yves

  10. #30
    Membre averti
    Avatar de anadoncamille
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2007
    Messages
    395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2007
    Messages : 395
    Points : 310
    Points
    310
    Billets dans le blog
    1
    Par défaut
    J'ai essayé la syntaxe suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Color32[] data = texture.GetRawTextureData<Color32>();
    où j'ai remplacé var qui ne plaisait pas par le type qui me semblait correspondre : Color32[]. Mais ça ne compile pas. Pourquoi ?
    __________________________________
    | +
    | Sylvain Tournois - Création logicielle
    |
    | sylv.tournois.free.fr
    |

  11. #31
    Membre confirmé
    Homme Profil pro
    Développeur multiplateformes
    Inscrit en
    Mars 2003
    Messages
    273
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur multiplateformes
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2003
    Messages : 273
    Points : 628
    Points
    628
    Par défaut
    Citation Envoyé par anadoncamille Voir le message
    J'ai essayé la syntaxe suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Color32[] data = texture.GetRawTextureData<Color32>();
    où j'ai remplacé var qui ne plaisait pas par le type qui me semblait correspondre : Color32[]. Mais ça ne compile pas. Pourquoi ?
    Il est au contraire conseillé de garder "var" quand il n'y a pas d'ambiguïté sur le type renvoyé - ce qui est notre cas ici (question de lisibilité globale du code).
    Sinon il faut voir la doc de GetRawTextureData : https://docs.unity3d.com/ScriptRefer...xtureData.html
    La donnée renvoyée est donc NativeArray<Color32> : https://docs.unity3d.com/ScriptRefer...veArray_1.html
    C'est une suite d'octets correspondant au données rvba et pouvant donc être traitée comme un tableau (voir l'exp. avec la doc de GetRawTextureData).
    C'est une approche identique à ce qui se fait en C++.

    Yves

  12. #32
    Membre averti
    Avatar de anadoncamille
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2007
    Messages
    395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2007
    Messages : 395
    Points : 310
    Points
    310
    Billets dans le blog
    1
    Par défaut
    J"ai essayé la syntaxe suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    NativeArray<Color32> data = texture.GetRawTextureData<Color32>();
    mais ça n'a pas marché. Donc j'ai essayé d'inclure UnityEngine.CoreModule mais le compilateur me dit qu'il ne trouve pas ce module. Qu'est-ce qu'il se passe ?

    Autre chose, pour vérifier que j'ai bien compris la syntaxe avec < et > : la ligne suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    GetComponent<RawImage>().texture = texture;
    cherche un composant de type RawTexture dans la liste des composants, je suppose que c'est le premier qui vient.

    La syntaxe avec < et > est elle spécifique à Unity ou est-ce une spécificité du C# ?
    __________________________________
    | +
    | Sylvain Tournois - Création logicielle
    |
    | sylv.tournois.free.fr
    |

  13. #33
    Membre confirmé
    Homme Profil pro
    Développeur multiplateformes
    Inscrit en
    Mars 2003
    Messages
    273
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur multiplateformes
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2003
    Messages : 273
    Points : 628
    Points
    628
    Par défaut
    Citation Envoyé par anadoncamille Voir le message
    J"ai essayé la syntaxe suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    NativeArray<Color32> data = texture.GetRawTextureData<Color32>();
    mais ça n'a pas marché. Donc j'ai essayé d'inclure UnityEngine.CoreModule mais le compilateur me dit qu'il ne trouve pas ce module. Qu'est-ce qu'il se passe ?

    Autre chose, pour vérifier que j'ai bien compris la syntaxe avec < et > : la ligne suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    GetComponent<RawImage>().texture = texture;
    cherche un composant de type RawTexture dans la liste des composants, je suppose que c'est le premier qui vient.

    La syntaxe avec < et > est elle spécifique à Unity ou est-ce une spécificité du C# ?
    Avec using Unity.Collections cela devrait marcher.
    Mais utilisez "var" de préférence.

    <> correspond bien aux types génériques de C# :
    https://docs.microsoft.com/fr-fr/dot...ype-parameters
    N'hésitez pas à consulter la doc de Microsoft, très bien faite et en français.

    Yves

  14. #34
    Membre averti
    Avatar de anadoncamille
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2007
    Messages
    395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2007
    Messages : 395
    Points : 310
    Points
    310
    Billets dans le blog
    1
    Par défaut
    Avec Unity.Collections, ça marche. Je fais tout ça parce que j'aime bien comprendre correctement ce que j'écris. Le but de ce test était d'éviter d'utiliser le mot var, pour voir ce que l'on pouvait faire de plus rigoureux comme code. Cependant, je suis revenu à la syntaxe avec le mot var car elle simplifie le code, même si je n'aime pas le côté non-explicite du mot var.

    Merci Yves pour vos nombreuses réponses et les différents liens que vous m'avez transmis, c'est très instructif.

    Il me reste finalement seulement le problème des pixels flous. J'ai vu un composant nommé Pixel Perfect Camera mais je n'ai pas réussi à l'utiliser. Est-ce une piste intéressante ou n'y a-t-il définitivement aucun moyen d'avoir des pixels zoomés nets avec Unity seulement ?
    __________________________________
    | +
    | Sylvain Tournois - Création logicielle
    |
    | sylv.tournois.free.fr
    |

  15. #35
    Membre confirmé
    Homme Profil pro
    Développeur multiplateformes
    Inscrit en
    Mars 2003
    Messages
    273
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur multiplateformes
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2003
    Messages : 273
    Points : 628
    Points
    628
    Par défaut
    Citation Envoyé par anadoncamille Voir le message
    Avec Unity.Collections, ça marche. Je fais tout ça parce que j'aime bien comprendre correctement ce que j'écris. Le but de ce test était d'éviter d'utiliser le mot var, pour voir ce que l'on pouvait faire de plus rigoureux comme code. Cependant, je suis revenu à la syntaxe avec le mot var car elle simplifie le code, même si je n'aime pas le côté non-explicite du mot var.

    Merci Yves pour vos nombreuses réponses et les différents liens que vous m'avez transmis, c'est très instructif.

    Il me reste finalement seulement le problème des pixels flous. J'ai vu un composant nommé Pixel Perfect Camera mais je n'ai pas réussi à l'utiliser. Est-ce une piste intéressante ou n'y a-t-il définitivement aucun moyen d'avoir des pixels zoomés nets avec Unity seulement ?
    Dans la logique des choses, si l'on veut afficher une "plage" équivalent à plusieurs pixels dans une couleur donnée sans passer par une modification des pixels un à un il faut passez par un affichage vectoriel.
    Comme déjà dit cela se fera de façon optimale avec des biblios C++ dédiées en dehors d'Unity sous Visual C++ , Builder C++ et autres…
    Cette solution n'est valable que si vous n'envisagez pas de développements plus sophistiqués par la suite, vers la 3D par exp.
    En restant sous Unity, comme déjà dit aussi il sera très performant de travailler les shaders, mais assez complexe (perso je n'ai pas eu l'occasion de m'y coller)
    Sinon, toujours sous Unity faire appel à un package vectorielle comme "Vector Graphics" ou autres (allez faire un tour aussi dans l'asset store : https://assetstore.unity.com/)

    Il faut voir aussi jusqu'à quel point la vitesse est importante en fonction des efforts à faire pour y parvenir…
    D'autant qu'Unity arrive maintenant à un niveau de performances très correct (traduction automatique en C++, haut niveau d'optimisation et compilation en code natif sur certaines plateformes comme Android 64) et cela va s'améliorer encore fortement à l'avenir...

    Yves

  16. #36
    Membre averti
    Avatar de anadoncamille
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2007
    Messages
    395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2007
    Messages : 395
    Points : 310
    Points
    310
    Billets dans le blog
    1
    Par défaut
    Merci, je m'en vais essayer.
    __________________________________
    | +
    | Sylvain Tournois - Création logicielle
    |
    | sylv.tournois.free.fr
    |

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. conversion type Image vers tableau
    Par elektronik-17 dans le forum Débuter
    Réponses: 6
    Dernier message: 22/08/2008, 00h47
  2. Conversion tableau en image
    Par axel119 dans le forum Collection et Stream
    Réponses: 10
    Dernier message: 11/08/2007, 14h54
  3. conversion d'image jpeg en tableau de pixel
    Par sophie86 dans le forum Multimédia
    Réponses: 7
    Dernier message: 09/11/2005, 11h30
  4. Conversion d'images 24/32 Bits -> 16bits
    Par RVP dans le forum Langage
    Réponses: 4
    Dernier message: 30/05/2004, 17h05
  5. Conversion avi->image
    Par lio_on_jb_groove dans le forum DirectX
    Réponses: 1
    Dernier message: 17/07/2003, 10h11

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