3D, arrêtes cachées, transformations, moteur de rendu.

Pour toute demande d'aide sur des exemples non finalisés, c'est ici.
Les exemples aboutis et intéressants seront ajoutés aux sous-forums qui suivent.

Règles du forum
Pour toute demande d'aide pour la conception (ou la confirmation d'un code) d'une figure Asymptote, c'est ici.

J'invite ceux qui ont régulièrement des questions à poser à aller dans leur panneau de l'utilisateur pour indiquer dans la signature de leurs messages :

  1. Nom du système d'exploitation (W7 ou Ubuntu 12.04 ou ...)
  2. Version d'Asymptote et éditeur utilisé pour les figures Asymptote
  3. Distribution LaTeX et éditeur utilisé pour les tex.


On va gagner du temps dans les réponses !
balaitous
Messages : 3
Enregistré le : mer. 11 mars 2015, 18:11

3D, arrêtes cachées, transformations, moteur de rendu.

Message non lu par balaitous » jeu. 12 mars 2015, 00:36

Bonjour,

C'est mon premier post, et j'ai besoin d'aide.
Je connais asymptote depuis près de 10 ans, mais je ne l'avais encore jamais utilisé car cela me semblait complexe, et la documentation assez obscure.

Je suis donc jusqu'à maintenant resté fidèle à pstricks + extensions.

Mais pour illustrer une présentation sur les projections cartographiques, pstricks est un peu dépassé, donc je me tourne avec beaucoup de difficultés vers asymptote.

Voila mon code :

Code : Tout sélectionner

settings.render=0;
settings.prc=false;

import three;
import solids;
import coastline;

size(8cm,0);

currentprojection=orthographic(2,2,1);

real radius   = 1;               // Rayon de la sphère
triple pS     = (0, 0, -radius); // Pôle sud
triple pN     = (0, 0, radius);  // Pôle nord
triple center = (0, 0, 0);       // Centre de la Terre
path3 NS_axis = (0, 0, -1.5)--(0, 0, 1.5);

transform3 scale_radius = scale(radius, radius, radius);

// Axes des pôles
draw(scale_radius*NS_axis, black + linewidth(1.5));
// path3 rot_arrow = arc((0, 0 ,1.4), .15, -90, 0, 90, 0);
// draw(scale_radius*rot_arrow, black);

// Symbolisation de la projection
real a = 15 * pi / 180;
real b = 45 * pi / 180;
path3 l = (0, 0, sin(b))--(cos(a)*cos(b), sin(a)*cos(b), sin(b))--(cos(a), sin(a), sin(b));
draw(scale_radius*l, red + linewidth(1.5));
dotfactor = 10;
dot(scale_radius*l, red + linewidth(2));

revolution sp = sphere(center, radius, n=12);

draw(surface(sp), surfacepen=.9*darkgreen + opacity(.4), meshpen=.9*darkgreen + opacity(.7));
draw(scale_radius*coastline, darkgreen);

revolution cy = cylinder(pS, radius, 2*radius, Z);

draw(surface(cy), surfacepen=.9*darkblue + opacity(.2), meshpen=.9*darkblue + opacity(.7));
draw(scale_radius*coastline_cylinder, darkblue);
Puis le résultat :
Image

Pour être complet, le fichier coastline.asy est généré par un script python à partir des données natural-earth.(shapefile)
https://www.dropbox.com/s/br9mp9iiot3xx ... .asy?raw=1

Mes problèmes sont les suivants:

* Comment faire pour que les traits de squelette des parties cachées se fassent discrètes ?
* Idem avec le trait de côte.
* Les coordonnées du trait de côte sur le cylindre sont générées en python. Comment le faire dans asymptote application d'une transformation (non affine) au trait de côte sur la sphère.
* Comment compiler ? L'image pdf que j'obtiens est déplorable (ps. je n'utilise pas acrobat reader, non libre et dont l'éditeur affiche un mépris ouvert pour la communauté linux)
Le meilleur compromis que j'ai trouvé est la chaine de compilation ci-dessous. Je préférerai conserver un format vectoriel, mais je ne veux pas être dépendant des caprices de rendu d'opacité de tel ou tel lecteur pdf.

Code : Tout sélectionner

asy -f eps -o projection_cylindrique.eps projection_cylindrique.asy
ps2pdf -dEPSCrop projection_cylindrique.eps projection_cylindrique.pdf
gs -dSAFER -dBATCH -dNOPAUSE -sDEVICE=jpeg -r300 -sOutputFile=projection_cylindrique.jpg projection_cylindrique.pdf
Votre aide me sera d'un grand secours, puisque si je ne parviens pas à améliorer ce résultat, je me tournerais probablement vers d'autre solutions (povray ? blender ? ... solutions écartés pour l'instant car elles me semblent plus laborieuses à mettre en oeuvre).
J'avais écarté dès le départ pstricks à cause du problème des faces cachées.

Avatar du membre
GM
Administrateur du site
Administrateur du site
Messages : 1512
Enregistré le : dim. 7 mars 2010, 14:50

Re: 3D, arrêtes cachées, transformations, moteur de rendu.

Message non lu par GM » jeu. 12 mars 2015, 08:22

Bonjour et bienvenue sur le forum,

je vais commencer par préciser que :
  • je ne suis pas sûr d'avoir compris toutes les demandes, notamment, ce qui est espéré en ce qui concerne la vue des parties cachées ;
  • je n'ai pas le temps maintenant (c'est la période des conseils de classe qui débute) mais je relirai attentivement la demande plus tard, si ce n'est pas trop tard, car le problème est intéressant ;
  • je ne sais pas si on pourra régler tous les problèmes soulevés (notamment celui des parties cachées... car Asymptote a toujours des limitations de ce côté là : je rappelle qu'il ne faut pas espérer avoir (du moins simplement) des lignes cachées en pointillés... et on ne fait pas tout ce que l'on veut au niveau des transparences ;
  • si j'ai une certaine réactivité sur tous les demandes liées à la 2D, je ne pratique quasiment jamais la 3D donc je vais devoir aussi chercher et tâtonner pour tenter d'améliorer le résultat.
  • la seule quasi-certitude que j'ai à cet instant (sans l'avoir déjà fait), c'est que l'on va savoir déduire coastline_cylinder de coastline.
J'espère que d'autres utilisateurs d'Asymptote utilisant plus la 3D que moi... viendront suggérer de bonnes idées.
Index des fonctions - Exemple de lien donnant le résultat d'une recherche sur les mots 'arc' et 'triple' : http://asy.marris.fr/indexasy/?filtre=arc triple
Mes configurations (le 24/02/21) :
PC n°1 :Windows 10 - Asymptote(2.82)+MikTeX2.9 - Editeurs : Notepad++, TeXworks, Visual Studio Code.
PC n°2 : Ubuntu 20.04LTS - Asymptote(2.67-?? git) + TexLive2020
Mon serveur : Debian Stretch- Asymptote(2.68-16 git) + TexLive2018
Merci de préciser la votre !

balaitous
Messages : 3
Enregistré le : mer. 11 mars 2015, 18:11

Re: 3D, arrêtes cachées, transformations, moteur de rendu.

Message non lu par balaitous » jeu. 12 mars 2015, 22:11

Merci pour cette réponse.

Ce que je souhaiterais c'est faire apparaître de manière plus discrète les méridiens et parallèles cachés de la sphère. Tirets, pointillés, ..., pour l'instant je suis dans une phase de test pour obtenir le meilleur rendu graphique.

Pour le trait de côte, je souhaiterais également faire apparaître discrètement les parties non visibles. Sous cet angle de vue, c'est essentiellement l'Amérique.
Peut-être faut-il calculer "à la main" les parties visibles et non visibles.
Dans asympotote (cohérence avec la projection facile à obtenir) ? lors de l'extraction des données en python (cohérence plus difficile à maintenir avec la projection) ?

Il faudrait que le cylindre soit traité comme la sphère.

Pour l'instant je fais des tests, il est probable que dans la version définitive je fasse 2 images
* La première mettant en avant le trait de côte sur la sphère
* La deuxième mettant en avant le trait de côte sur le cylindre.

Enfin obtenir coastline_cylinder à partir de coastline, c'est plus pour la beauté de la chose (Mais c'est certainement formateur vis-à-vis d'asymptote) car la solution python est fonctionnelle.

Ces schémas s'insèrent dans une présentation annuelle sur les SIG, si je ne peux pas remplacer mes illustrations wikipédia dans la version 2015, ça sera pour la version 2016.

Répondre