Annonce

Réduire
Aucune annonce.

Partir du Mesh pour obtenir les données .hgt ?

Réduire
X
 
  • Filtre
  • Heure
  • Afficher
Tout nettoyer
nouveaux messages

  • Partir du Mesh pour obtenir les données .hgt ?

    Bonsoir tous …

    Grâce au merveilleux travail de Oscar et ses Ortho4XP, il est possible à partir de données d'élévation (.hgt) d'obtenir des Mesh de qualité pour nos tuiles photos .

    Ma question est la suivante : est-il possible de faire l'inverse ? à partir d'un Mesh de reconstituer des données d'élévation .hgt ? et si oui, comment ?

    La raison ?

    Tant pour la scène "Cervin" (où le problème est réglé, Fabio Bellini ayant fourni les patches nécessaires) que pour les Dolomites, Frank Dainese le concepteur principal a modifié le Mesh d'origine .

    Afin d'avoir des parois verticales de très bonne qualité visuelle et d'éviter un étirement de l'image comme on l'a dans une orthophoto, Frank a construit ses montagnes sous forme d'objets ! pouvant ainsi plaquer des images-photo sur les parois verticales, comme pour un bâtiment.
    Mais pour que ces "montagnes-objets" reposent correctement à leur place, il a modifié le Mesh et créé dans les zones de ces montagnes des "à plat". Sur lesquels reposent les "montagnes-objets".

    Si vous voulez créer une tuile photo pour cette scène , elle va intégrer le vrai mesh et n'aura pas des fameux "à plat" . Résultat : les montagnes-objets vont se poser par dessus , au sommet des montagnes de votre Mesh : elle flotteront dans les airs !
    Il faudrait donc construire sa tuile photo en utilisant le Mesh corrigé de Frank de façon à intégrer les "à-plat" !
    D'où la nécessité d'extraire SES données d'élévation à partir de son Mesh …
    Pour X-Plane : Mac Studio M2 Ultra CPU 24 coeurs GPU 76 coeurs 128 G0 / SSD 4T0 + En Ext. : SSD 4To + HD Lacie Thunderbolt 6To .
    Samsung 49" 3840 x 1080 / Dell 24" 1920 x 1200 // Saitek X52 ; Rudders Pro Flight Combat
    i'Pad Pro 12,9 (X-Mapper Pro)
    MAC OS Sonoma 14.5/XPlane 12.1.3 r2 (… XP -> XP 6 !)


    " Soyez vous même … les autres sont déjà pris ! "
    "… la fausseté des idées ne se règle pas par les interdictions mais s'asphyxie dans la liberté ! " Marc Bonnant

    Localisation : près de LSGL​

  • #1
    Les DSF créés par Meshtool contiennent les données d'élévation en brut à un endroit bien déterminé à l'intérieur du DSF.
    Pour les récupérer tu peux faire :
    DSFTool -dsf2text le_nom_du_fichier_dsf_dé7zippé_si_besoin.dsf ton_nom_préféré.txt (DSFTool est un des utilitaires des xptools disponibles sur le site de Laminar)
    En plus de mettre les commandes du dsf au format texte (dont tu te moques ici), tu obtiendras un fichier d'élévation .raw (raw = brut) et aussi éventuellement un fichier de bathymétrie.
    Tu peux utiliser le .raw d'élévation directement dans le champs custom_dem d'Ortho4XP.

    -----
    Ortho4XP possède une autre fonctionnalité qui pourrait aussi être utilisée ici (encore faut-il vérifier que le Cervin modélisé ne possède pas de surplombs) : celle de faire confondre le mesh localement avec un .obj donné (un exemple dans la dropbox avec le .obj de Méribel de Jean-Marie; Jasum pourrait aussi te montrer son intégration de l'aiguille du midi). Dans ce cas l'objet ne vient plus se poser de guingois en conflit avec le mesh mais s'emboîte exactement dessus (ce qui permet entre autre d'éviter de rendre l'objet solide, car ça coûte assez cher à X-Plane)
    Linux Debian sid - Intel i7 4Ghz - 16Gb RAM - Nvidia GTX 970
    Ortho4XP v130 : Dépôt github (mises à jour au fil de l'eau (avant la période de sécheresse)), ou Version clés en main sous Windows.

    Commentaire


    • #1
      Oscar tu peux me donner la formule pour récupérer directement les données du .raw altitudes, je l'ai pour les .hgt mais je trouve pas pour .raw.
      Merci par avance.
      Portable PC LDLC Intel(R)Core(TM)i7 7700 4.2ghz, Mem:36GO - 2 cartes graphiques GTx1080sli 8go - windows 10
      XP v9 & v10 & v11

      (ancien)Pilote Privé, pilote modèles réduits dont hélico.
      Roule en Burgman 650, roulait en Spyder, roulait en ST1300.

      Commentaire


      • #1
        Qu'est-ce que tu endends par la formule ? Les altitudes sont encodées comme dans un .hgt (2 bytes par point, sans entêtes) à la seule différence que l'ordre des bits est inversé (tu lis les 2 bytes, tu fais un byteswap, ensuite tu lis comme un int16)
        Linux Debian sid - Intel i7 4Ghz - 16Gb RAM - Nvidia GTX 970
        Ortho4XP v130 : Dépôt github (mises à jour au fil de l'eau (avant la période de sécheresse)), ou Version clés en main sous Windows.

        Commentaire


        • #1
          C'est la formule du byteswap que j'arrive pas à faire correctement.
          Portable PC LDLC Intel(R)Core(TM)i7 7700 4.2ghz, Mem:36GO - 2 cartes graphiques GTx1080sli 8go - windows 10
          XP v9 & v10 & v11

          (ancien)Pilote Privé, pilote modèles réduits dont hélico.
          Roule en Burgman 650, roulait en Spyder, roulait en ST1300.

          Commentaire


          • #1
            Un très grand merci Oscar, je vais donc me lancer et vous tiendrai au courant

            Envoyé par Oscar Pilote Voir le message
            (DSFTool est un des utilitaires des xptools disponibles sur le site de Laminar)Tu peux utiliser le .raw d'élévation directement dans le champs custom_dem d'Ortho4XP.
            Utilisé de nombreuses fois déjà, ne devrait donc pas poser de problèmes .


            Envoyé par Oscar Pilote Voir le message
            rendre l'objet solide, ça coûte assez cher à X-Plane
            Pas si sûr !
            En 2016, j'avais fait l'acquisition de "CZST-Stewart" de "BETI-X" !
            Dans leur scène, tous les bâtiments sont construits en "solide" ! Afin de vérifier, j'avais repris l'ensemble de leur bâtiments (.obj) et supprimé la particularité "en dur" afin de supprimer le test de collision pour X-Plane.
            Je n'avais alors pas remarqué (dans mes conditions d'emploi) une grande différence de FPS entre l'une ou l'autre version .
            Pour X-Plane : Mac Studio M2 Ultra CPU 24 coeurs GPU 76 coeurs 128 G0 / SSD 4T0 + En Ext. : SSD 4To + HD Lacie Thunderbolt 6To .
            Samsung 49" 3840 x 1080 / Dell 24" 1920 x 1200 // Saitek X52 ; Rudders Pro Flight Combat
            i'Pad Pro 12,9 (X-Mapper Pro)
            MAC OS Sonoma 14.5/XPlane 12.1.3 r2 (… XP -> XP 6 !)


            " Soyez vous même … les autres sont déjà pris ! "
            "… la fausseté des idées ne se règle pas par les interdictions mais s'asphyxie dans la liberté ! " Marc Bonnant

            Localisation : près de LSGL​

            Commentaire


            • #1
              Envoyé par Oscar Pilote Voir le message
              Qu'est-ce que tu endends par la formule ? Les altitudes sont encodées comme dans un .hgt (2 bytes par point, sans entêtes) à la seule différence que l'ordre des bits est inversé (tu lis les 2 bytes, tu fais un byteswap, ensuite tu lis comme un int16)
              Oscar tu peux me donner la formule à utiliser, j'y bourre
              Portable PC LDLC Intel(R)Core(TM)i7 7700 4.2ghz, Mem:36GO - 2 cartes graphiques GTx1080sli 8go - windows 10
              XP v9 & v10 & v11

              (ancien)Pilote Privé, pilote modèles réduits dont hélico.
              Roule en Burgman 650, roulait en Spyder, roulait en ST1300.

              Commentaire


              • #1
                Un très grand merci Oscar !

                Enfin les DOLOMITES comme je les espérais !

                Explications et images à venir !
                Pour X-Plane : Mac Studio M2 Ultra CPU 24 coeurs GPU 76 coeurs 128 G0 / SSD 4T0 + En Ext. : SSD 4To + HD Lacie Thunderbolt 6To .
                Samsung 49" 3840 x 1080 / Dell 24" 1920 x 1200 // Saitek X52 ; Rudders Pro Flight Combat
                i'Pad Pro 12,9 (X-Mapper Pro)
                MAC OS Sonoma 14.5/XPlane 12.1.3 r2 (… XP -> XP 6 !)


                " Soyez vous même … les autres sont déjà pris ! "
                "… la fausseté des idées ne se règle pas par les interdictions mais s'asphyxie dans la liberté ! " Marc Bonnant

                Localisation : près de LSGL​

                Commentaire


                • #1
                  Envoyé par AIME43 Voir le message
                  C'est la formule du byteswap que j'arrive pas à faire correctement.
                  Pour un 16 bits : Inverser les deux paquets de 8 bits qui le compose, par exemple (pas forcement optimal) :

                  - Lire le 16 bits dans une variable.
                  - Masquer l'octet de poids fort avec une opération ET bitwise avec 0x00FF (en C : & 0x00FF) pour garder l'octet de poids faible.
                  - Le décaler vers les poids forts (en C : << 8).
                  - Relire le 16 bits dans une autre variable.
                  - Masquer l'octet de poids faible avec une opération ET bitwise avec 0xFF00 (en C : & 0xFF00) pour garder l'octet de poids fort.
                  - Combiner les deux avec une opération OU bitwise (en C : | )

                  PhM
                  X-Plane 9.70 & 11.5r1 / W10 / AMD Ryzen 7 2700 / 8Go RAM / Sapphire R9 390 Nitro 8Go / Sapphire HD7870 GHz 2Go / Samsung LN40C530 / Oculus DK2 / LeapMotion / Saitek X56 / Thrustmaster Pendular Rudder

                  Commentaire


                  • #1
                    Merci PhM, c'est sympa
                    Mais c'est bien ce que j'avais trouvé comme solution, mais cela me donne des nombres à 5 chiffres !!
                    Portable PC LDLC Intel(R)Core(TM)i7 7700 4.2ghz, Mem:36GO - 2 cartes graphiques GTx1080sli 8go - windows 10
                    XP v9 & v10 & v11

                    (ancien)Pilote Privé, pilote modèles réduits dont hélico.
                    Roule en Burgman 650, roulait en Spyder, roulait en ST1300.

                    Commentaire


                    • #1
                      Envoyé par AIME43 Voir le message
                      ... mais cela me donne des nombres à 5 chiffres !!
                      Tu parles de nombres en décimal, pas en binaire ?

                      En décimal un nombre 16 bits non signé va de 0 à 65535, un nombre signé va de -32768 à 32767, ce sont tous des nombres à cinq chiffres au maximum.

                      PhM
                      Dernière modification par PhM, 27 mars 2018, 17h31.
                      X-Plane 9.70 & 11.5r1 / W10 / AMD Ryzen 7 2700 / 8Go RAM / Sapphire R9 390 Nitro 8Go / Sapphire HD7870 GHz 2Go / Samsung LN40C530 / Oculus DK2 / LeapMotion / Saitek X56 / Thrustmaster Pendular Rudder

                      Commentaire


                      • #1
                        Oui le résultat en nombres décimal.
                        Et dire que pour les fichiers .hgt ça marche, avec une formule légèrement différente.
                        Portable PC LDLC Intel(R)Core(TM)i7 7700 4.2ghz, Mem:36GO - 2 cartes graphiques GTx1080sli 8go - windows 10
                        XP v9 & v10 & v11

                        (ancien)Pilote Privé, pilote modèles réduits dont hélico.
                        Roule en Burgman 650, roulait en Spyder, roulait en ST1300.

                        Commentaire


                        • #1
                          Envoyé par AIME43 Voir le message
                          Oui le résultat en nombres décimal.
                          Et dire que pour les fichiers .hgt ça marche, avec une formule légèrement différente.
                          Tant que tu ne donneras pas d'info sur ce qui marche, également mieux expliquer le problème et donner la formule qui marche je ne pourrais pas faire plus.

                          PhM
                          X-Plane 9.70 & 11.5r1 / W10 / AMD Ryzen 7 2700 / 8Go RAM / Sapphire R9 390 Nitro 8Go / Sapphire HD7870 GHz 2Go / Samsung LN40C530 / Oculus DK2 / LeapMotion / Saitek X56 / Thrustmaster Pendular Rudder

                          Commentaire


                          • #1
                            pour les fichiers HGT:
                            Dim buffer.b(1)
                            value = ((buffer(1) & $FF) | (buffer(0) << 8) )

                            pour les fichiers RAW x-plane:
                            buffer.w
                            value = (((buffer & $00FF) << 8) ) | ((buffer & $FF00) >> 8)

                            Merci de ta sollicitude
                            Portable PC LDLC Intel(R)Core(TM)i7 7700 4.2ghz, Mem:36GO - 2 cartes graphiques GTx1080sli 8go - windows 10
                            XP v9 & v10 & v11

                            (ancien)Pilote Privé, pilote modèles réduits dont hélico.
                            Roule en Burgman 650, roulait en Spyder, roulait en ST1300.

                            Commentaire


                            • #1
                              Le but est de changer l'endianness d'un nombre de 16 bits non signé, de big endian vers little endian ou réciproquement. Le langage utilisé n’étant pas précisé je vais donc me baser sur des hypothèses, je vais supposer que :

                              • buffer.b est un tableau de nombres de 16 bits non signés comprenant deux éléments.
                              • buffer.w est un nombre de 16 bits non signé.


                              Envoyé par AIME43 Voir le message
                              pour les fichiers HGT:
                              Dim buffer.b(1)
                              value = ((buffer(1) & $FF) | (buffer(0) << 8) )
                              Dans ce cas si mon hypothèse est valide tu essayes de faire un nombre de 16 bits à partir de deux autres nombres de 16 bits. Ce n'est pas ce que l'on souhaite faire, ce serait plutôt :

                              value = ((buffer.b(0) & $00FF) | (buffer.b(0) << 8) )

                              On peut faire le << sans masquer puisque lors d'un décalage, arithmétique ou logique, les bits de poids faible seront mis à zéro.

                              Envoyé par AIME43 Voir le message
                              pour les fichiers RAW x-plane:
                              buffer.w
                              value = (((buffer & $00FF) << 8) ) | ((buffer & $FF00) >> 8)
                              Dans ce cas, si buffer.w est bien le nombre à convertir alors c'est celui qu'il faut utiliser, en reprenant la même ligne cela donne :

                              value = (((buffer.w & $00FF) << 8) ) | ((buffer.w & $FF00) >> 8)

                              Avec cette écriture il est primordial que buffer.w soit non signé, dans le cas contraire le >> va propager le bit de signe et mettre tous les bits de poids fort à 1, ce qui n'est pas du tout ce que l'on souhaite.

                              PhM
                              X-Plane 9.70 & 11.5r1 / W10 / AMD Ryzen 7 2700 / 8Go RAM / Sapphire R9 390 Nitro 8Go / Sapphire HD7870 GHz 2Go / Samsung LN40C530 / Oculus DK2 / LeapMotion / Saitek X56 / Thrustmaster Pendular Rudder

                              Commentaire

                              Chargement...
                              X