Supprimer le scintillement d'un dé à jouer en 3D ?

Tout ce qui concerne le langage Asymptote. Ce langage est supporté sur le forum via les balises asy.

Modérateur : gdm_asy

Règles du forum
Merci de soigner la rédaction de vos messages et de consulter ce sujet avant de poster. Pensez également à utiliser la fonction recherche du forum.
AndréC
Utilisateur confirmé
Utilisateur confirmé
Messages : 18
Inscription : dimanche 17 avril 2016, 14:25

[Résolu] Supprimer le scintillement d'un dé à jouer en 3D ?

Message par AndréC »

Bonjour,
Je suis en train d'apprendre Asymptote et ce qui m'intéresse est la 3D manipulable avec la souris. Pour ma première figure en 3D, j'ai dessiné un dé à jouer dont le code est ci-dessous. Malheureusement les disques représentant les points scintillent lorsque l'on fait tourner ce dé à la souris.
J'en conclus que je dois m'y prendre autrement pour colorier les faces du dé car lorsque je supprime l'instruction de la ligne 25

Code : Tout sélectionner

draw(tX*scale3(84a)*unitcube, surfacepen=white);
alors le dé ne scintille plus, mais du coup devient transparent.

je pense qu'il faudrait arriver à colorier une première fois les faces sans les disques, puis en une deuxième étape les disques eux-mêmes.
Seulement , je ne sais pas comment faire cela en 3D.

remarque : le dé mesure 4,2 cm et a = 0,05, d'où 84a = 4,2 cm.

Code : Tout sélectionner

import three;
currentprojection =orthographic((5,2,3));
currentlight=nolight; 
settings.tex="latex"; // Moteur LaTeX utilisé pour la compilation (latex, pdflatex, ...)
settings.outformat="pdf"; // Format de sortie ; eps par défaut
settings.prc=true; // Format PRC de la figure ; vrai par défaut
settings.render=-1; // Rendu des figures ; -1 par défaut
size(6cm,0);
real a = 0.05;
path 	carre = box ((0,0),(84a,84a)),
		disque = scale(9a)*unitcircle,
		patron1[] = shift(42a,42a)*disque,
		patron2[] = shift(14a,70a)*disque^^shift(70a,14a)*disque,
		patron3[] = shift(14a,70a)*disque^^shift(70a,14a)*disque^^shift(42a,42a)*disque,
		patron4[] = shift(14a,14a)*disque^^shift(14a,70a)*disque^^shift(70a,14a)*disque^^shift(70a,70a)*disque,
		patron5[] = shift(14a,14a)*disque^^shift(14a,70a)*disque^^shift(70a,14a)*disque^^shift(70a,70a)*disque^^shift(42a,42a)*disque,
		patron6[] = shift(14a,14a)*disque^^shift(14a,70a)*disque^^shift(70a,14a)*disque^^shift(70a,70a)*disque^^shift(42a,70a)*disque^^shift(42a,14a)*disque;
transform3 tX=shift(84a*X), tY=shift(84a*Y), tZ=shift(84a*Z);		
path3 	facegauche[] =path3(patron6,ZXplane),
		facedroite[] =path3(patron1,ZXplane),
		faceavant[] =path3(patron2,YZplane),
		facearriere[] =path3(patron5,YZplane),	
		facehaut[] =path3(patron4,XYplane),		
		facebas[] =path3(patron3,XYplane);		
draw(scale3(84a)*unitcube, surfacepen=white);
draw(box(O, 84a*(X+Y+Z)), gray);
draw(surface(facegauche),blue);
draw(surface(tY*facedroite),blue);
draw(surface(tZ*facehaut),blue);
draw(surface(facebas),blue);
draw(surface(facearriere),blue);
draw(surface(tX*faceavant),blue);
A moins que quelqu'un n'ait une autre solution ?
Je vous remercie de vos lumières.
Dernière modification par AndréC le lundi 10 juillet 2017, 17:09, modifié 2 fois.

OG
Modérateur
Modérateur
Messages : 2293
Inscription : lundi 12 mars 2007, 11:20
Localisation : Rouen

Re: Supprimer le scintillement d'un dé à jouer en 3D ?

Message par OG »

Bonjour

C'est normal (réponse facile). En effet les disques sont exactement sur la surface des faces, aucun des objets
n'est positionné au dessus/au dessous...
Solution 1 (voir code ci-joint) : décaler de $\varepsilon=0.001$ chaque disque dans le bon sens.

Solution 2 (moins facile) : dessiner réellement chaque face comme le carré privé des disques

Code : Tout sélectionner

import three;
    currentprojection =orthographic((5,2,3));
    currentlight=nolight;
    settings.tex="latex"; // Moteur LaTeX utilisé pour la compilation (latex, pdflatex, ...)
    settings.outformat="pdf"; // Format de sortie ; eps par défaut
    settings.prc=true; // Format PRC de la figure ; vrai par défaut
    settings.render=-1; // Rendu des figures ; -1 par défaut
    size(6cm,0);
    real a = 0.05;
    path    carre = box ((0,0),(84a,84a)),
          disque = scale(9a)*unitcircle,
          patron1[] = shift(42a,42a)*disque,
          patron2[] = shift(14a,70a)*disque^^shift(70a,14a)*disque,
          patron3[] = shift(14a,70a)*disque^^shift(70a,14a)*disque^^shift(42a,42a)*disque,
          patron4[] = shift(14a,14a)*disque^^shift(14a,70a)*disque^^shift(70a,14a)*disque^^shift(70a,70a)*disque,
          patron5[] = shift(14a,14a)*disque^^shift(14a,70a)*disque^^shift(70a,14a)*disque^^shift(70a,70a)*disque^^shift(42a,42a)*disque,
          patron6[] = shift(14a,14a)*disque^^shift(14a,70a)*disque^^shift(70a,14a)*disque^^shift(70a,70a)*disque^^shift(42a,70a)*disque^^shift(42a,14a)*disque;
    transform3 tX=shift((84a+00.1)*X), tY=shift((84a+.001)*Y), tZ=shift((84a+0.01)*Z);      
    path3    facegauche[] =shift(0,-0.001,0)*path3(patron6,ZXplane),
          facedroite[] =path3(patron1,ZXplane),
          faceavant[] =path3(patron2,YZplane),
          facearriere[] =shift(-0.001,0,0)*path3(patron5,YZplane),   
          facehaut[] =path3(patron4,XYplane),      
          facebas[] =shift(0,0,-0.001)*path3(patron3,XYplane);      
    draw(scale3(84a)*unitcube, surfacepen=white);
    draw(box(O, 84a*(X+Y+Z)), gray);
    draw(surface(facegauche),blue);
    draw(surface(tY*facedroite),blue);
    draw(surface(tZ*facehaut),blue);
    draw(surface(facebas),blue);
    draw(surface(facearriere),blue);
    draw(surface(tX*faceavant),blue);
J'ai mis aussi une réponse sur stackexchange :)

O.G.

rebouxo
Modérateur global
Modérateur global
Messages : 6962
Inscription : mercredi 15 février 2006, 13:18
Localisation : le havre

Re: Supprimer le scintillement d'un dé à jouer en 3D ?

Message par rebouxo »

Oh, lumière, lumière, n'exagérons rien ;-).
La source des scintillements viens que tu as des objets plans l'un sur l'autre. Il suffit de décaler les cercles légèrement du cube pour que le scintillement disparaisse, j'ai décalé de h.

Je propose ceci comme code

Code : Tout sélectionner

import three;
currentprojection =orthographic((5,2,3));
currentlight=nolight;
settings.tex="latex"; // Moteur LaTeX utilisé pour la compilation (latex, pdflatex, ...)
settings.outformat="pdf"; // Format de sortie ; eps par défaut
settings.prc=true; // Format PRC de la figure ; vrai par défaut
settings.render=-1; // Rendu des figures ; -1 par défaut
size(6cm,0);
real a = 0.05;
real h = 0.001 ;
surface cube = scale3(84*a)*unitcube ;

surface disqueX = scale3(9*a)*unitdisk ;
surface disqueY = rotate(90,Y)*scale3(9*a)*unitdisk ;
surface disqueZ = rotate(90,X)*scale3(9*a)*unitdisk ;


draw(cube, white, gray+linewidth(1bp));

surface[] face1 = {shift(42*a,42*a,84*(a+h))*disqueX} ;
surface[] face6 = {shift(14*a,14*a,-h)*disqueX,
		   shift(14*a,42*a,-h)*disqueX,
		   shift(14*a,70*a,-h)*disqueX,
		   shift(70*a,14*a,-h)*disqueX,
		   shift(70*a,42*a,-h)*disqueX,
		   shift(70*a,70*a,-h)*disqueX} ;


surface[] face2 = {shift(-h,14*a,14*a)*disqueY,
		   shift(-h,70*a,70*a)*disqueY} ;

surface[] face5 = {shift(84*(a+h),14*a,14*a)*disqueY,
		   shift(84*(a+h),14*a,70*a)*disqueY,
		   shift(84*(a+h),42*a,42*a)*disqueY,
		   shift(84*(a+h),70*a,14*a)*disqueY,
		   shift(84*(a+h),70*a,70*a)*disqueY} ;

surface[] face4 = {shift(14*a,84*(a+h),14*a)*disqueZ,
		   shift(14*a,84*(a+h),70*a)*disqueZ,
		   shift(70*a,84*(a+h),14*a)*disqueZ,
		   shift(70*a,84*(a+h),70*a)*disqueZ} ;
	      

surface[] face3 = {shift(14*a,-h,14*a)*disqueZ,
		   shift(42*a,-h,42*a)*disqueZ,
		   shift(70*a,-h,70*a)*disqueZ} ;


surface[][] points = {face1,face2,face3,face4,face5,face6} ;


for(int i = 0 ; i < 6 ; ++i)
  {
    for(int cpt = 0 ; cpt <= i ; ++cpt)
      {
	draw(points[i][cpt],blue,blue) ;
      }
  }
La principale différence est d'utiliser systématiquement les objets 3d, plutôt que de gérer des objets plans, pour les plaquer sur le dés. Plutôt une histoire de goût, mais je soupçonne que ta méthode soit plus efficace, si il y a beaucoup d'objets. Comme je ne peux pas concaténer des surface (dommage) j'ai fait des tableaux de surface (un pour chaque face) et un tableau de ces tableaux, pour éviter des copier-coller.

Olivier
Zut griller par Olivier !
@O.G. Pour la 2e idée, je pense que ce n'est faisable qu'avec des objets 2D ?
Il manque des choses dans asymptote : faire des trous, des chanfreins, bref toutes choses utile pour la CAO. :D
A line is a point that went for a walk. Paul Klee.
Par solidarité, pas de MP.

AndréC
Utilisateur confirmé
Utilisateur confirmé
Messages : 18
Inscription : dimanche 17 avril 2016, 14:25

Re: Supprimer le scintillement d'un dé à jouer en 3D ?

Message par AndréC »

@OG merci beaucoup, j'ai compris l'origine du problème et le code fonctionne parfaitement.
Je vais clore la question sur stackexchange.

@rebouxo, merci beaucoup pour le code, j'essaie de le comprendre mais malheureusement je n'arrive pas à le compiler en ligne de commande, j'ai ces erreurs :
de.asy: 5.1: no type of name 'surface'
de.asy: 5.29: no matching variable 'unitcube'

P.S:
- Comment dit t-on que le sujet est résolu ?
- Je signale un problème sur le forum : lorsqu'on clique sur le bouton « tout sélectionner » pour copier le code, on change de page et on se retrouve sur la page d'accueil des forums. En revanche, la sélection et la copie par clic droit à la souris fonctionne.

rebouxo
Modérateur global
Modérateur global
Messages : 6962
Inscription : mercredi 15 février 2006, 13:18
Localisation : le havre

Re: Supprimer le scintillement d'un dé à jouer en 3D ?

Message par rebouxo »

Tu édites ton premier message (toi seul peut le faire) et tu mets un [RÉSOLU] !
Par contre c'est bizarre les erreurs sur le fichier.
Quelle version d'asymptote ? Quel OS ?

Ce qui est surprenant c'est l'erreur à la première ligne.

@O.G. J'ai réussi à faire les trous :
b5296a5e8da737f4d68d391678f051b7106dcd55.svg
Mais je ne sais pas plaquer ces images 2D sur un cube.
Olivier
A line is a point that went for a walk. Paul Klee.
Par solidarité, pas de MP.

AndréC
Utilisateur confirmé
Utilisateur confirmé
Messages : 18
Inscription : dimanche 17 avril 2016, 14:25

Re: [RESOLU] Supprimer le scintillement d'un dé à jouer en 3

Message par AndréC »

@rebouxo j'utilise Asymptote 2.41 sur Windows 7 pro 64 bits

rebouxo
Modérateur global
Modérateur global
Messages : 6962
Inscription : mercredi 15 février 2006, 13:18
Localisation : le havre

Re: [RESOLU] Supprimer le scintillement d'un dé à jouer en 3

Message par rebouxo »

Même version, mais sous linux.
Un problème d'encodage de caractères ?
A line is a point that went for a walk. Paul Klee.
Par solidarité, pas de MP.

AndréC
Utilisateur confirmé
Utilisateur confirmé
Messages : 18
Inscription : dimanche 17 avril 2016, 14:25

Re: [RESOLU] Supprimer le scintillement d'un dé à jouer en 3

Message par AndréC »

rebouxo a écrit :Même version, mais sous linux.
Un problème d'encodage de caractères ?
Le fichier était encodé en UTF8 sans BOM (avec notepad++). Je viens de le convertir en UTF8 et j'ai cette erreur :
de.asy: 1.1: invalid token
de.asy: 1.2: invalid token
de.asy: 1.3: invalid token

En réencodant en UTF8 sans BOM, plus aucun problèmes !
C'est vraiment bizarre !

OG
Modérateur
Modérateur
Messages : 2293
Inscription : lundi 12 mars 2007, 11:20
Localisation : Rouen

Re: [RESOLU] Supprimer le scintillement d'un dé à jouer en 3

Message par OG »

Bonsoir

Comme j'écrivais ce matin il y a une solution 2, Asymptote peut transformer un contour 2D en une surface 3D.
C'est ce qui fait pour les étiquettes en 3D : bezulate est ton ami.
@monvoisinhavrais: il y a aussi extrude qui peut servir..

Il faut donc construire chaque face trouée et là plus besoin du décalage de $\varepsilon$
Pour que bezulate comprenne la construction 1 carré privé d'un disque, il faut faire
un reverse(disque), c'est la règle.

Voici le code

Code : Tout sélectionner


    currentprojection =orthographic((5,2,3));
    currentlight=nolight;
    settings.tex="latex"; // Moteur LaTeX utilisé pour la compilation (latex, pdflatex, ...)
    settings.outformat="pdf"; // Format de sortie ; eps par défaut
    settings.prc=true; // Format PRC de la figure ; vrai par défaut
    settings.render=-1; // Rendu des figures ; -1 par défaut
    size(6cm,0);
    real a = 0.05;
    path    carre = box ((0,0),(84a,84a)),
          // reverse est capital pour créer les trous avec bezulate
          // c'est la règle : unitsquare et disque ne seront pas dans le
          // même sens, donc bezulate comprend que c'est un trou
          disque = scale(9a)*reverse(unitcircle),  
          
          patron1[] = shift(42a,42a)*disque,
          patron2[] = shift(14a,70a)*disque^^shift(70a,14a)*disque,
          patron3[] = shift(14a,70a)*disque^^shift(70a,14a)*disque^^shift(42a,42a)*disque,
          patron4[] = shift(14a,14a)*disque^^shift(14a,70a)*disque^^shift(70a,14a)*disque^^shift(70a,70a)*disque,
          patron5[] = shift(14a,14a)*disque^^shift(14a,70a)*disque^^shift(70a,14a)*disque^^shift(70a,70a)*disque^^shift(42a,42a)*disque,
          patron6[]=  shift(14a,14a)*disque^^shift(14a,70a)*disque^^shift(70a,14a)*disque^^shift(70a,70a)*disque^^shift(42a,70a)*disque^^shift(42a,14a)*disque;
    transform3 tX=shift((84a)*X), tY=shift((84a)*Y), tZ=shift((84a)*Z);      
    path3    facegauche[] =path3(patron6,ZXplane),
          facedroite[] =path3(patron1,ZXplane),
          faceavant[] =path3(patron2,YZplane),
          facearriere[] =path3(patron5,YZplane),   
          facehaut[] =path3(patron4,XYplane),      
          facebas[] =path3(patron3,XYplane);      
    
 //   draw(scale3(84a)*unitcube, surfacepen=white);
    draw(box(O, 84a*(X+Y+Z)), gray);
    draw(surface(facegauche),blue);
    draw(surface(tY*facedroite),blue);
    draw(surface(tZ*facehaut),blue);
    draw(surface(facebas),blue);
    draw(surface(facearriere),blue);
    draw(surface(tX*faceavant),blue);
// les faces trouées
    path[] gp6=bezulate(scale(84a)*unitsquare^^patron6);
    path[] gp5=bezulate(scale(84a)*unitsquare^^patron5);
    path[] gp4=bezulate(scale(84a)*unitsquare^^patron4);
    path[] gp3=bezulate(scale(84a)*unitsquare^^patron3);
    path[] gp2=bezulate(scale(84a)*unitsquare^^patron2);
    path[] gp1=bezulate(scale(84a)*unitsquare^^patron1);
    surface s1=shift((0,84a,84a))*rotate(90,Y)*rotate(90,X)*surface(gp1);
    surface s2=shift(84a,0,0)*rotate(-90,Y)*surface(gp2);
    surface s3=surface(gp3);
    surface s4=shift((0,0,84a))*surface(gp4);
    surface s5=shift((0,0,84a))*rotate(90,Y)*surface(gp5);
    surface s6=shift((0,0,84a))*rotate(90,Y)*rotate(90,X)*surface(gp6);
    draw(s6,red);
    draw(s5,red);
    draw(s4,red);
    draw(s3,red);
    draw(s2,red);
    draw(s1,red);
h142.png
O.G.
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.

rebouxo
Modérateur global
Modérateur global
Messages : 6962
Inscription : mercredi 15 février 2006, 13:18
Localisation : le havre

Re: [RESOLU] Supprimer le scintillement d'un dé à jouer en 3

Message par rebouxo »

Ou c'est documenté, ça bezulate ?

Je me disais que l'on devait pouvoir faire un extrudé. J'essayerais cela demain.

Olivier
A line is a point that went for a walk. Paul Klee.
Par solidarité, pas de MP.

AndréC
Utilisateur confirmé
Utilisateur confirmé
Messages : 18
Inscription : dimanche 17 avril 2016, 14:25

Re: [RESOLU] Supprimer le scintillement d'un dé à jouer en 3

Message par AndréC »

@OG Génial, je vais essayer de comprendre le code puis de faire un vrai dé avec des trous à la place des points !

@rebouxo et @OG, j'ai copié-collé vos solutions sur le stackexchange français de tex à savoir texnique.fr ici : http://texnique.fr/osqa/questions/3425/ ... de-a-jouer

AndréC
Utilisateur confirmé
Utilisateur confirmé
Messages : 18
Inscription : dimanche 17 avril 2016, 14:25

Re: [RESOLU] Supprimer le scintillement d'un dé à jouer en 3

Message par AndréC »

Je viens juste de translater le dé de -4.2X car je trouve qu'ainsi il se manipule plus facilement à la souris (et j'ai mis les couleurs lightolive et darkmagenta), ce qui donne le code :

Code : Tout sélectionner

import three;
    currentprojection =orthographic((5,2,3));
    currentlight=nolight;
    settings.tex="latex"; // Moteur LaTeX utilisé pour la compilation (latex, pdflatex, ...)
    settings.outformat="pdf"; // Format de sortie ; eps par défaut
    settings.prc=true; // Format PRC de la figure ; vrai par défaut
    settings.render=-1; // Rendu des figures ; -1 par défaut
    size(6cm,0);
    real a = 0.05;
	real h=0.001;
    path    carre = box ((0,0),(84a,84a)),
          disque = scale(9a)*unitcircle,
          patron1[] = shift(42a,42a)*disque,
          patron2[] = shift(14a,70a)*disque^^shift(70a,14a)*disque,
          patron3[] = shift(14a,70a)*disque^^shift(70a,14a)*disque^^shift(42a,42a)*disque,
          patron4[] = shift(14a,14a)*disque^^shift(14a,70a)*disque^^shift(70a,14a)*disque^^shift(70a,70a)*disque,
          patron5[] = shift(14a,14a)*disque^^shift(14a,70a)*disque^^shift(70a,14a)*disque^^shift(70a,70a)*disque^^shift(42a,42a)*disque,
          patron6[] = shift(14a,14a)*disque^^shift(14a,70a)*disque^^shift(70a,14a)*disque^^shift(70a,70a)*disque^^shift(42a,70a)*disque^^shift(42a,14a)*disque;
    transform3 tX=shift(-(84a+h)*X), tY=shift((84a+h)*Y), tZ=shift((84a+h)*Z);      
    path3 facegauche[] =shift(0,-h,0)*path3(patron6,ZXplane),
          facedroite[] =path3(patron1,ZXplane),
          faceavant[] =shift(h,0,0)*path3(patron2,YZplane),
          facearriere[] =shift(-h,0,0)*path3(patron5,YZplane),   
          facehaut[] =path3(patron4,XYplane),      
          facebas[] =shift(0,0,-h)*path3(patron3,XYplane); 
//	draw(O--4.2X ^^ O--4.2Y ^^ O--4.2Z,red);	  
    draw(tX*scale3(84a)*unitcube, surfacepen=lightolive);
    draw(box(O, 84a*(-X+Y+Z)), palecyan);
    draw(surface(tX*facegauche),darkmagenta);
    draw(surface(tX*tY*facedroite),darkmagenta);
    draw(surface(tX*tZ*facehaut),darkmagenta);
    draw(surface(-tX*facebas),darkmagenta);
    draw(surface(-tX*facearriere),darkmagenta);
    draw(surface(faceavant),darkmagenta);
Je m'attaque au plus dur comprendre vos codes à tous deux. :shock:

AndréC
Utilisateur confirmé
Utilisateur confirmé
Messages : 18
Inscription : dimanche 17 avril 2016, 14:25

Re: [RESOLU] Supprimer le scintillement d'un dé à jouer en 3

Message par AndréC »

rebouxo a écrit :Ou c'est documenté, ça bezulate ?
Je viens de la trouver dans le manuel officiel en anglais
-> chapitre 8 base module
--> section 8.29 three
--->page numérotée 134 (p 139 du PDF).

rebouxo
Modérateur global
Modérateur global
Messages : 6962
Inscription : mercredi 15 février 2006, 13:18
Localisation : le havre

Re: [RESOLU] Supprimer le scintillement d'un dé à jouer en 3

Message par rebouxo »

merci
Olivier
A line is a point that went for a walk. Paul Klee.
Par solidarité, pas de MP.

OG
Modérateur
Modérateur
Messages : 2293
Inscription : lundi 12 mars 2007, 11:20
Localisation : Rouen

Re: [RESOLU] Supprimer le scintillement d'un dé à jouer en 3

Message par OG »

Pour bezulate, cela rejoint un des fils récents sur Asymptote : la documentation.
Celles et ceux qui ont suivi régulièrement le développement d'Asymptote ont plus
de chances d'être au courant que celle ou celui qui débarque, parcourt la doc...

@AndréC : je ne sais pas pourquoi la figure est "plus manipulable", il est clair que
pour la solution 2, la figure est plus complexe il y a plus de carreaux de Bézier donc
plus de calculs mais sur une machine "moderne" et "standard" je doute que cela
ralentisse notablement...

O.G.

AndréC
Utilisateur confirmé
Utilisateur confirmé
Messages : 18
Inscription : dimanche 17 avril 2016, 14:25

Re: [RESOLU] Supprimer le scintillement d'un dé à jouer en 3

Message par AndréC »

OG a écrit : @AndréC : je ne sais pas pourquoi la figure est "plus manipulable", il est clair que
pour la solution 2, la figure est plus complexe il y a plus de carreaux de Bézier donc
plus de calculs mais sur une machine "moderne" et "standard" je doute que cela
ralentisse notablement...
O.G.
Ce n'est pas une question de ralentissement, elle est plus facile à manipuler, selon moi, car le dé tourne sur lui même comme le ferait un ballon autour de son centre.
Précédemment, elle tournait autour autour d'une arête latérale (celle de gauche me semble t-il). Ce qui avait pour effet d'avoir des rotations plus difficiles à diriger avec la souris.

OG
Modérateur
Modérateur
Messages : 2293
Inscription : lundi 12 mars 2007, 11:20
Localisation : Rouen

Re: [RESOLU] Supprimer le scintillement d'un dé à jouer en 3

Message par OG »

AndréC a écrit :
OG a écrit : @AndréC : je ne sais pas pourquoi la figure est "plus manipulable", il est clair que
pour la solution 2, la figure est plus complexe il y a plus de carreaux de Bézier donc
plus de calculs mais sur une machine "moderne" et "standard" je doute que cela
ralentisse notablement...
O.G.
Ce n'est pas une question de ralentissement, elle est plus facile à manipuler, selon moi, car le dé tourne sur lui même comme le ferait un ballon autour de son centre.
Précédemment, elle tournait autour autour d'une arête latérale (celle de gauche me semble t-il). Ce qui avait pour effet d'avoir des rotations plus difficiles à diriger avec la souris.
Ok, je comprends mieux. C'est peut-être juste une question de définition des paramètres de perspective, qui (bizarrement) ne sont pas les mêmes.
Avec la fenêtre OpenGL, la touche "c" affiche dans la console tous les paramètres... permet de comparer les deux fichiers asy.

O.G.

AndréC
Utilisateur confirmé
Utilisateur confirmé
Messages : 18
Inscription : dimanche 17 avril 2016, 14:25

Re: [RESOLU] Supprimer le scintillement d'un dé à jouer en 3

Message par AndréC »

OG a écrit :Ok, je comprends mieux. C'est peut-être juste une question de définition des paramètres de perspective, qui (bizarrement) ne sont pas les mêmes.
Avec la fenêtre OpenGL, la touche "c" affiche dans la console tous les paramètres... permet de comparer les deux fichiers asy.
O.G.
Voici les paramètres avec le dé du départ :

Code : Tout sélectionner

currentprojection=orthographic(
camera=(-2.0108149780213,14.4048903065911,0.973583358060801),
up=(-0.00700835867881202,-0.00309172725538799,0.0312695816480041),
target=(1.90038956793259e-15,8.63024929298462e-16,2.51968584885631e-16),
zoom=0.613913253540759);
Et ceux avec le dé translaté qui tourne autour de son centre :

Code : Tout sélectionner

currentprojection=orthographic(
camera=(11.8235956621239,4.72943826484957,7.09415739727435),
up=(-0.014547132307495,-0.005818852922998,0.0281244557944903),
target=(1.90038956793259e-15,8.63024929298462e-16,2.51968584885631e-16),
zoom=0.613913253540759);
Je n'y pige rien... :shock:

rebouxo
Modérateur global
Modérateur global
Messages : 6962
Inscription : mercredi 15 février 2006, 13:18
Localisation : le havre

Re: [RESOLU] Supprimer le scintillement d'un dé à jouer en 3

Message par rebouxo »

Ben camera, c'est la position de la caméra ;-). De l'observateur de ta scène 3D.
up indique où est le haut de la scène. zoom me paraît clair.
target n'est pas clair, je crois avoir compris que c'est la direction dans laquelle tu regardes, mais sans être certain.

Moi, je règle ma scène dans la fenêtre OpenGL, puis un coup de "c" est je copie les paramètres dans mon code.

Olivier
A line is a point that went for a walk. Paul Klee.
Par solidarité, pas de MP.

AndréC
Utilisateur confirmé
Utilisateur confirmé
Messages : 18
Inscription : dimanche 17 avril 2016, 14:25

Re: [RESOLU] Supprimer le scintillement d'un dé à jouer en 3

Message par AndréC »

Merci.
Je viens de regarder dans le document « Asymptote 3D » de Bruno Colombel http://asy.marris.fr/ressources/ASY_3D.pdf , il est écrit que « camera » est l'endroit où elle se trouve et « target » l'endroit où elle regarde.

Je cite en p 8 « Projette en deux dimensions du point de vue d’un observateur positionné en camera qui regarde target »