Projet informatique

Nalinux

It's not a bug, it's a feature.
C'est a cause des transformations geometriques: tu dessines d'abord l'objet centre a <0,0,0>, puis tu le tournes avec rotate... autour d'un ou plusieurs axes, et finalement tu le pousses avec translate... la ou tu veux l'avoir. J'avais deja mentionne ca dans le poste #132 plus haut:

Projet informatique | Page 7
Oui bien sur.
C'est juste pour en souligner l'importance. Au début pour des trucs simples je n'utilisai pas translate, mais plaçait directement en 3D, mais ça devient très vite inbouffable !
A moins d'aimer des coordonnées comme <5.125, 2.225001,-0.001> :)

Comme tout langage, je commence en mode bourrin avant d'affiner :D
Mais je ne regrette pas de m'y être penché, c'est pas fondamentalement compliqué et j'y vois pas mal de possibilités.
Finalement l'IDE est pourri .... Je fait avec Scite, en lançant la compil avec Tools -> Compile, et je visualise avec Geeqie qui met tout seul a jour l'image nouvellement créée.
L'interface sous Win est pas mal du tout en comparaison !

Tu a déjà utilisé Povray ou tu a simplement lu les docs sur le site ?
 

farid_h

<defunct>
Contributeur
Voici mon problème c'est affreux, je comprend rien à votre charabia je peux meme pas me concentrer
C'est exactement le probleme des surfaces qui coincident:

Tu as:

Code:
cylinder {
    <[b]1[/b],2,1>
    <[b]1.5[/b],2,1>
    // etc...
}

// et

box {
    <[b]1[/b],0,-0.5>     // correction: <0.999,0,-0.5>
    <[b]1.5[/b],1,2.5>    // correction: <1.5001,1,2.5>
    // etc...
}

Dans box {}, au lieu de 1 mets 0.999 et au lieu de 1.5 mets 1.5001, pour que les surfaces verticales du box et du cylindre ne coincident pas. Ou, dit autrement, elargis un peu le box vers la gauche (0.999) et vers la droite (1.5001), pour qu'il soit legerement plus large que le cylindre.

Edit: je vois qu'on ne peut pas mettre des parties du code en gras...
 
Dernière édition:

Nalinux

It's not a bug, it's a feature.
Voici mon problème c'est affreux, je comprend rien à votre charabia je peux meme pas me concentrer
Ton problème est simple.
Déjà, fait le ménage !
Tu fait la différence entre une box avec texture et un cylindre avec texture.
Pourquoi appliquer 2 fois les textures ?

Fait ton opération, et applique la texture ensuite.
Tu veux enlever une partie du cylindre, fait ta box plus grosse, tout simplement.

Code:
difference {
  cylinder {
  <1,2,1>      // Center of one end (x - y - z)
  <1.5,2,1>      // Center of other end
  2        // Diametre
   } 

   box {
  ICI  ----- > <0,0,-0.5>     // Near lower left corner,
------>         // au lieu de <1,0,-0.5>
ET LA ------> <2,1,2.5>     // Far upper right corner 
------>           // au lieu de <1.5,1,2.5>

}

  texture{ pigment{ crackle scale 1.5 turbulence 0.1
  color_map{[0.04 color Black]
  [0.09 color Black]
  [0.12 color rgb<1,0.65,0>]
  [1.00 color rgb<1,0.65,0>] }
  // end of color_map
  scale 0.2 } // end of pigment
  normal { bumps 0.75 scale 0.02 }
  finish { phong 1 }
  rotate<0,0,0>  translate<0.01, 0.04, 0.00>}

}

Tu peux utiliser les balises CODE
 

Pièces jointes

  • cone_1.png
    cone_1.png
    128.6 KB · Affichages: 6
  • Capture du 2015-04-12 13:53:36.png
    Capture du 2015-04-12 13:53:36.png
    4.4 KB · Affichages: 5

Nalinux

It's not a bug, it's a feature.
@farid_h, j'ai envie d'essayer de réaliser des mécanismes animés.
Exemple des trucs comme ici :
Philon de Byzance : LE LIVRE DES APPAREILS PNEUMATIQUES ET DES MACHINES HYDRAULIQUES

J'ai lu un tuto pas mal sur Blender hier :
Faisons connaissance avec l'interface

Son moteur de jeu est capable de gérer les évènements.
Chose qu'on peut aussi faire avec Povray :
http://www.f-lohmueller.de/pov_tut/animate/pov_anif.htm

Les 2 sont totalement différents dans le fonctionnement, et je me demande ce que tu en pense.
Lequel serai le plus adapté selon toi, sachant que dans les 2 cas j'ai tout a apprendre ?

L'idéal serait l'opinion de quelqu'un qui connait les 2 ..
 
@farid_h, j'ai envie d'essayer de réaliser des mécanismes animés.
Exemple des trucs comme ici :
Philon de Byzance : LE LIVRE DES APPAREILS PNEUMATIQUES ET DES MACHINES HYDRAULIQUES

J'ai lu un tuto pas mal sur Blender hier :
Faisons connaissance avec l'interface

Son moteur de jeu est capable de gérer les évènements.
Chose qu'on peut aussi faire avec Povray :
http://www.f-lohmueller.de/pov_tut/animate/pov_anif.htm

Les 2 sont totalement différents dans le fonctionnement, et je me demande ce que tu en pense.
Lequel serai le plus adapté selon toi, sachant que dans les 2 cas j'ai tout a apprendre ?

L'idéal serait l'opinion de quelqu'un qui connait les 2 ..
Ayant débuté les animations sur POv-ray elles sont plus complexes que dans Blender.
Je connais pas très bien blender mais il est assez simple je trouve.
A toi de voir essaye les deux.
 

farid_h

<defunct>
Contributeur
Chez povray, il suffit de parametrer sur clock. Je trouve que c'est intuitif. Et en plus, on peut realiser plus d'effets que chez Blender. Par contre, le modelling de Blender est plus facile. Bref, il faut essayer les deux. Je ne peux pas donner d'opinion fondee la dessus. :)
 

Nalinux

It's not a bug, it's a feature.
Il semble que il va falloir tester les 2 ...
Je connais un gars que je pensai de bon conseil, mais il utilise Cinema 4D, et quand je lui ai montré le code de Povray il m'a dit que c'est pour les fous :)
 
@farid_h petite question pour faire les autres carrés directement, je fais translate comment je fais ça pour les autre trous?
 

Pièces jointes

  • cone.txt
    2.1 KB · Affichages: 3
  • cone.png
    cone.png
    226.2 KB · Affichages: 7

farid_h

<defunct>
Contributeur
@farid_h petite question pour faire les autres carrés directement, je fais translate comment je fais ça pour les autre trous?
Tu as le choix. Personellement, je placerais le cylindre a l'origine <0,0,0>; j'y ferais les trous directement, car les coordonnees de ces trous sont plus faciles a calculer comme ca, puis je ferais un translate final pour pousser l'ensemble de la roue dentee la ou tu veux l'avoir dans la position finale de la scene.
 

Nalinux

It's not a bug, it's a feature.
bah je veux faire une roue dentée avec 9 dents, moi je fais les carrés pour les trous.

Voila comment je ferai :
- définir le cylindre
Edit : comme @farid_h, en partant de 0,0,0 , c'est plus simple.
- définir la box
- faire difference (cylindre - box)
- tourner le cylindre de 1/9 de tour
- faire difference (cylindre - box)
##### le tout 9 fois
- mettre la roue droite
- la placer ou tu veux.

Code:
// Standard pre-defined colors
//
#include "colors.inc"  // The standard collection of textures
#include "textures.inc"  
#include "golds.inc"
camera {
  location <2,3,-4>
  look_at <0,0,2>  
}
light_source {
  <3,4,-3>
  rgb <1,1,1>  
}
plane {
  y
  0.05
  pigment {
  rgb <1,1,0> }  
  }
  
////////////////////////////////////////////////////////////////
// Affichage des reperes
cylinder {
  <0,-5,0>  <0,5,0> 0.04  // Axe des Y
  pigment { Blue }
  }  
box { <-8,0,-0.01>   <8,0.1,0.01>    // Axe des X
  pigment { Black }
  }
  
box { <-0.01,0,-8>   <0.01,0.1,8>   // Axe des Z
  pigment { Black }
  }  
  
////////////////////////////////////////////////////////////////  
  
#declare Roue_Dentee =  // On déclare le résultat comme un objet
#declare Nbre=0;  // depart du comptage des dents
#declare Nbre_De_Dents=9;  // nombre de dents voulu
  
union {  // Union pour  mieux voir
#while (Nbre < Nbre_De_Dents)  // Boucle #while
  cylinder { <0,0,0>  <0,0.5,0> 2
  }  
  box { <-0.5,-0.1,1.5>   <0.5,0.6,2.5>  
  rotate<0,Nbre* 360/Nbre_De_Dents,0>  // A chaque dent, on fait tourner la boite autour
  // de l'axe des Y
  pigment { Red } // En couleur pour visualiser 
  
  }
  #declare Nbre = Nbre + 1;
  #end
  

texture{ pigment{ crackle scale 1.5 turbulence 0.1 
  color_map{[0.04 color Black] 
  [0.09 color Black] 
  [0.12 color rgb<1,0.65,0>] 
  [1.00 color rgb<1,0.65,0>] }
  // end of color_map
  scale 0.2 } // end of pigment
  normal { bumps 0.75 scale 0.02 }
  finish { phong 1 } 
}
  } 
////////////////////////////////////////////////////////////////
  
object { Roue_Dentee  // On met l'objet "Roue_Dentee" la ou on veut
  rotate< 0, 0, 90 >  // rotation pour la mettre verticale
  translate<-1,2.4,2>  // et tu la met ou tu veux
  }  

///////////////////// End /////////////////////////////////////
 

Pièces jointes

  • cone.png
    cone.png
    73 KB · Affichages: 8

Nalinux

It's not a bug, it's a feature.
Il faut dire a @wawa96 de scroller dans ton code.... juste un detail.
C'est pour ça que j'ai mis des commentaires et que j'ai un peu de ménage :)
Si on a du mal avec les opérations de base mais que le 3/4 du code c'est des futilités comme les textures, c'est la panique ...
Un outil un peu archaïque mais indispensable, voir photo.
 

Pièces jointes

  • papier.jpg
    papier.jpg
    17.7 KB · Affichages: 6
Voila comment je ferai :
- définir le cylindre
Edit : comme @farid_h, en partant de 0,0,0 , c'est plus simple.
- définir la box
- faire difference (cylindre - box)
- tourner le cylindre de 1/9 de tour
- faire difference (cylindre - box)
##### le tout 9 fois
- mettre la roue droite
- la placer ou tu veux.

Code:
// Standard pre-defined colors
//
#include "colors.inc"  // The standard collection of textures
#include "textures.inc" 
#include "golds.inc"
camera {
  location <2,3,-4>
  look_at <0,0,2> 
}
light_source {
  <3,4,-3>
  rgb <1,1,1> 
}
plane {
  y
  0.05
  pigment {
  rgb <1,1,0> } 
  }
 
////////////////////////////////////////////////////////////////
// Affichage des reperes
cylinder {
  <0,-5,0>  <0,5,0> 0.04  // Axe des Y
  pigment { Blue }
  } 
box { <-8,0,-0.01>   <8,0.1,0.01>    // Axe des X
  pigment { Black }
  }
 
box { <-0.01,0,-8>   <0.01,0.1,8>   // Axe des Z
  pigment { Black }
  } 
 
//////////////////////////////////////////////////////////////// 
 
#declare Roue_Dentee =  // On déclare le résultat comme un objet
#declare Nbre=0;  // depart du comptage des dents
#declare Nbre_De_Dents=9;  // nombre de dents voulu
 
union {  // Union pour  mieux voir
#while (Nbre < Nbre_De_Dents)  // Boucle #while
  cylinder { <0,0,0>  <0,0.5,0> 2
  } 
  box { <-0.5,-0.1,1.5>   <0.5,0.6,2.5> 
  rotate<0,Nbre* 360/Nbre_De_Dents,0>  // A chaque dent, on fait tourner la boite autour
  // de l'axe des Y
  pigment { Red } // En couleur pour visualiser
 
  }
  #declare Nbre = Nbre + 1;
  #end
 

texture{ pigment{ crackle scale 1.5 turbulence 0.1
  color_map{[0.04 color Black]
  [0.09 color Black]
  [0.12 color rgb<1,0.65,0>]
  [1.00 color rgb<1,0.65,0>] }
  // end of color_map
  scale 0.2 } // end of pigment
  normal { bumps 0.75 scale 0.02 }
  finish { phong 1 }
}
  }
////////////////////////////////////////////////////////////////
 
object { Roue_Dentee  // On met l'objet "Roue_Dentee" la ou on veut
  rotate< 0, 0, 90 >  // rotation pour la mettre verticale
  translate<-1,2.4,2>  // et tu la met ou tu veux
  } 

///////////////////// End /////////////////////////////////////
Ton plan est interessant comment tu l'as créé? j'aimerai l'utiliser pour expliquer la tridimensionalité le jour de mon examen oral...
 

Nalinux

It's not a bug, it's a feature.
Ton plan est interessant comment tu l'as créé? j'aimerai l'utiliser pour expliquer la tridimensionalité le jour de mon examen oral...
Euh .....
C'est pour ca que j ai commenté le code :p

////////////////////////////////////////////////////////////////
// Affichage des reperes
cylinder {
<0,-5,0> <0,5,0> 0.04 // Axe des Y
pigment { Blue }
}
box { <-8,0,-0.01> <8,0.1,0.01> // Axe des X
pigment { Black }
}

box { <-0.01,0,-8> <0.01,0.1,8> // Axe des Z
pigment { Black }
}
////////////////////////////////////////////////////////////////
 
Euh .....
C'est pour ca que j ai commenté le code :p

////////////////////////////////////////////////////////////////
// Affichage des reperes
cylinder {
<0,-5,0> <0,5,0> 0.04 // Axe des Y
pigment { Blue }
}
box { <-8,0,-0.01> <8,0.1,0.01> // Axe des X
pigment { Black }
}

box { <-0.01,0,-8> <0.01,0.1,8> // Axe des Z
pigment { Black }
}
////////////////////////////////////////////////////////////////
Donc tu as finalement mis union{ pour que je puisse mettre la meme texture ou bien quoi? on pouvait aussi faire que des trous avec difference { non?
 

Nalinux

It's not a bug, it's a feature.
Scène sans ciel ni sol, Povray lancé avec l'option +UA, pour avoir un canal alpha qui permet la transparence, bien qu'on puisse aussi enlever les zones noires avec ImageMagick, aperçu avec l'option +Q0 pour le positionnement correct de la soucoupe,

Images de la scène ajoutée a une image fixe toujours via un script qui appelle ImageMagick.
Encodage mpeg fait avec mencoder.
Sélection de la partie sonore avec Audacity.
Montage avec OpenShot.

La trajectoire est une fonction sinusoïdale.
Le son vient bien sur du film "Forbidden Planet", et la soucoupe de la série "Les envahisseurs".

Il y a plus beau, mais c'est didactique :)
Le code est vraiment mal foutu pour la partie forme de la soucoupe, c'est mon premier et la je le récrirai différemment, bien sur. C'est même surprenant que ça fonctionne ! :)

 

Pièces jointes

  • soucoupe2.txt
    2.7 KB · Affichages: 3
  • soucoupe2_ini.txt
    326 bytes · Affichages: 2

Nalinux

It's not a bug, it's a feature.
Merci ! :)
J'ai fait des essais, mais pas trop cherché de ce coté la encore. C'était prévu :)
Le truc pratique c'est que ImageMagick est efficace, rapide et scriptable pour changer le fond sans toucher au rendu lui même.
A l'origine, c'est l'image de dessous, mais sans ciel ni mer ni réflexions bien sur.
La je pense tester avec de la mécanique et faire le truc en bambou comme dans Kill Bill.
Il me faut voir les fluides ...

Comme la :
watch?v=IY-H9EPiY7Y
 

Pièces jointes

  • soucoupe2.png
    soucoupe2.png
    218.9 KB · Affichages: 7

Nalinux

It's not a bug, it's a feature.
@farid_h
Sous FreeBSD, as tu une fenêtre de prévisualisation durant le calcul ?
Je l ai sous Linux, mais rien a faire ...
Même avec l option +D

Pourtant dans les logs :

Image Output Options
Image resolution.....512 by 384 (rows 1 to 384, columns 1 to 512).
Output file..........soucoupe2.png, 24 bpp PNG
Dithering............Off

Graphic display......On (gamma: sRGB)
Mosaic preview.......Off
Continued trace......Off
Information Output Options
All Streams to console..........On
Debug Stream to console.........On
Fatal Stream to console.........On
Render Stream to console........On
Statistics Stream to console....On
Warning Stream to console.......On


J ai pense a un problème d affichage avec du composite, mais idem sous un basique Wmaker.

//////


De plus, vu que l image de base est minuscule, 160x120, j ai directement modifie dans /usr/local/etc/povray/3.7/povray.ini pour ne pas avoir a préciser a chaque fois.
La config sous Win n est pas la même, j ai teste dans une VM.

C est sale, mais si je met dans mon .povaray/3.7 ca fait des erreurs sans calculer.

J ai ça au passage :

;; Display the image while tracing controls.
Display=true ;; (+/-D)
Pause_When_Done=true ;; (+/-P)

+W512 +H384

;; Output quality. (Ray tracer actions).
;; 0-1 Quick colours. Full ambient lighting only.
;; 2-3 Quick colours. Diffuse and ambient lighting only.
;; 4 Quick colours. Render shadows. No extended lights.
;; 5 Quick colours. Render shadows including extended lights.
;; 6-7 Texture patterns.
;; 8 Reflected, refracted and transmitted rays.
;; 9 Compute media.
;; 10 Compute radiosity but no media.
;; 11 Compute radiosity and media.
Quality=9 ;; (+Qn)
 

farid_h

<defunct>
Contributeur
Comment tu as installe graphics/povray37? Packages ou ports? Je sais qu'avec ports, il faut activer l'option X11; sinon t'as pas de preview... ;)

Edit: Voici comment je l'utilise:

Code:
% povray37 +W640 +H480 +Onalinux1.png +D +P nalinux1.pov
 
Dernière édition:

Nalinux

It's not a bug, it's a feature.
Comment tu as installe graphics/povray37? Packages ou ports? Je sais qu'avec ports, il faut activer l'option X11; sinon t'as pas de preview... ;)

Edit: Voici comment je l'utilise:

Code:
% povray37 +W640 +H480 +Onalinux1.png +D +P nalinux1.pov
Ah ben oui, je suis une nouille :)
Je ne maitrise pas trop les ports encore, jamais penché sur le truc. Un simple make showconfig , make config et make install ont réglé le problème :)
Pour définir le rendu par défaut, j'ai ajouté ça a /usr/local/etc/povray/3.7/povray.ini, dans le HOME ca veux pas trop.

Width = 512
Height = 384; Turn display on
Display=On
(comme +D)

Merci :p
 

farid_h

<defunct>
Contributeur
Ou c'est que tu installes povray.ini dans $HOME?

Unix Section 5

An INI file is a text file containing settings for what used to be called POV-Ray command-line options. It replaces and expands on the functions of the DEF files associated with previous versions of POV-Ray. You can store a default set of options in the main POV-Ray INI file which is searched for at the following locations:

The place defined by the POVINI environment variable.
./povray.ini
$HOME/.povray/3.7/povray.ini
$PREFIX/etc/povray/3.7/povray.ini ($PREFIX by default is /usr/local)

For backwards compatibility with version 3.5, POV-Ray 3.7 also attempts to read the main INI file from the old locations when none is found at the places above:

$HOME/.povrayrc
$PREFIX/etc/povray.ini ($PREFIX by default is /usr/local)

Note: Use of these locations is deprecated, they will not be available in future versions.

Any other INI file can be specified by passing the INI file name on the command line.

One of the options you can set in the INI file is the name of an input file. You can specify the name of a POV file here. This way you can customize POV-Ray settings for any individual scene file.

For instance, if you have a file called scene.pov, you can create a file scene.ini to contain settings specific for scene.pov. If you include the option Input_File_Name=scene.pov in scene.ini, and then run povray scene.ini, POV-Ray will process scene.pov with the options specified in scene.ini.

Remember, though, that any options set at the command line when you activate an INI file override any corresponding options in the INI file, see the section Understanding POV-Ray Options. Any options you do not set in the INI file will be taken as last set by any other INI file or as originally determined in povray.ini.

You can instruct POV-Ray to generate an INI file containing all the options active at the time of rendering. This way, you can pass a POV file and its associated INI file on to another person and be confident that they will be able to generate the scene exactly the same way you did. See the section Using INI Files for more information.

J'ai pas encore essaye...
 

farid_h

<defunct>
Contributeur
Un peu OT, mais il faudrait avoir l'equivalent sonore de povray! Par exemple, des haut-parleurs derriere un objet produisent de sons moins forts que directement visibles..., les materiels des objets peuvent avoir des proprietes d'absorbsion, transformation etc. de sons; des echos devraient etre possibles et ainsi de suite.

bref, une synthese entre povray et csound ne serait pas mal!
 

farid_h

<defunct>
Contributeur
explique deux secondes pourquoi pour les axes tu as mis box, cylinder?

Il a tout simplement varie pour experimenter un peu:

Code:
////////////////////////////////////////////////////////////////
// Affichage des reperes
cylinder {
  <0,-5,0>  <0,5,0> 0.04  // Axe des Y
  pigment { Blue }
  }  
box { <-8,0,-0.01>   <8,0.1,0.01>    // Axe des X
  pigment { Black }
  }
  
box { <-0.01,0,-8>   <0.01,0.1,8>   // Axe des Z
  pigment { Black }
  }

Les axes noirs sont des box(es) tres fins et longs, comme des allumettes. L'axe bleu est un cylindre fin comme une mine de crayon. Les uns sont carres comme une poutre (mais tu ne peux pas bien le reconnaitre dans l'image), l'autre est rond. Rien ne t'empeche d'utiliser 3 cylindres pour les axes. ;)
 
Il a tout simplement varie pour experimenter un peu:

Code:
////////////////////////////////////////////////////////////////
// Affichage des reperes
cylinder {
  <0,-5,0>  <0,5,0> 0.04  // Axe des Y
  pigment { Blue }
  } 
box { <-8,0,-0.01>   <8,0.1,0.01>    // Axe des X
  pigment { Black }
  }
 
box { <-0.01,0,-8>   <0.01,0.1,8>   // Axe des Z
  pigment { Black }
  }

Les axes noirs sont des box(es) tres fins et longs, comme des allumettes. L'axe bleu est un cylindre fin comme une mine de crayon. Les uns sont carres comme une poutre (mais tu ne peux pas bien le reconnaitre dans l'image), l'autre est rond. Rien ne t'empeche d'utiliser 3 cylindres pour les axes. ;)
AAAh d'accord merci :cool: pas très visible à l'image
 
@farid_h l'étape suivante que je me suis fixé c'est de prendre mes deux roues et de les mettre dans un même plan afin de les animer, c'est compliqué?
 

Pièces jointes

  • roue_dentee5.txt
    7.9 KB · Affichages: 2
  • cone.txt
    1.8 KB · Affichages: 2
Haut