Ces fichiers contiennent des formes prédéfinies et des macros de génération de forme.
"shapes.inc" inclut "shapes_old.inc" et contient plusieurs macros pour travailler avec les objets, et pour créer des objets spéciaux, comme du texte bisauté, des champs de niveaux sphériques et des formes arrondies.
Beaucoup d'objets dans "shapes_old.inc" ne sont pas très utiles dans les nouvelles versions de POV-Ray, et sont conservés pour des besoins de compatibilité avec d'anciennes scènes écrites pour des versions de POV-Ray qui manquaient de primitives comme les cônes, disques, plans, etc.
Le fichier "shapes2.inc" contient quelques formes plus utiles, incluant les polyhèdres réguliers, et "shapesq.inc" contient plusieurs définitions de formes quartiques et cubiques.
Certaines de ces formes de "shapesq.inc" seront plus faciles à générer, plus flexibles et probablement plus rapides en tant qu'isosurfaces, mais elles sont toujours utiles pour deux raisons : compatibilité ascendante et le fait que les isosurfaces sont toujours finies.
Isect(Pt, Dir, Obj, OPt) et IsectN(Pt, Dir, Obj, OPt, ONorm)
Ces macros sont des interfaces à la fonction trace(). Isect() ne renvoie que le point d'intersection, IsectN() renvoie aussi la normale de surface. Ces macros renvoient le point et l'information de la normale à travers leurs paramètres, et le vrai ou faux dépend de la découverte de l'intersection :
Si une intersection est trouvée, elles renvoient vrai et mettent OPt au point d'intersection, et ONorm à la normale. Sinon elles renvoient faux, et elles ne modifient pas OPt ou ONorm.
Paramètres :
Pt = L'origine (point de départ) du rayon.Dir = La direction du rayon.Obj = L'objet où tester l'intersection.OPt = Une variable déclarée, la macro y placera le point d'intersection.ONorm = Une variable déclarée, la macro y placera la normale de surface au point d'intersection.Extents(Obj, Min, Max). Cette macro est un raccourci pour appeler à la fois min_extent() et max_extent() pour avoir les coins de la boîte englobante d'un objet. Elle renvoie ces valeurs à travers les paramètres Min et Max.
Paramètres :
Obj = L'objet dont vous chercher les extensions.Min = Une variable déclarée, la mocro y placera le min_extent de l'objet.Max = Une variable déclarée, la macro y placera le max_extent de l'objet.Center_Object(Object, Axis). Un raccourci pour utiliser la macro Center_Trans() avec un objet.
Paramètres :
Object = L'objet à centrer.Axis = Voir Center_Trans() dans la documentation de transforms.inc.Align_Object(Object, Axis, Pt). Un raccourci pour l'utilisation de la macro Align_Trans() avec un objet.
Paramètres :
Object = L'objet à aligner.Axis = Voir Align_Trans() dans la documentation de transforms.inc.Point = Le point où aligner la boîte englobante de l'objet.Bevelled_Text(Font, String, Cuts, BevelAng, BevelDepth, Depth, Offset, UseMerge). Cette macro tente de "bisauter" l'objet texte. Elle le fait en créant une intersection de plusieurs copies du texte, chacune tournée dans une direction différente. Le résultat n'est pas parfait, mais il peut être acceptables selon l'objectif. Attention : l'objet généré peut se rendre beaucoup plus lentement que l'objet texte ordinaire.
Paramètres :
Font = Une chaîne spécifiant la police à utiliser.String = La chaîne de texte générant l'objet.Cuts = Le nombre d'intersections à utiliser pour biseauter le texte. Plus il y a de coupes, plus le résultat est doux, mais cela prend plus de mémoire et est plus long à rendre.BevelAng = L'angle du biseau.BevelDepth = L'épaisseur du biseau.Depth = L'épaisseur totale de l'objet texte résultant.Offset = Le paramètre offset pour l'objet texte. La valeur z de ce vecteur sera ignorée, parce que toutes les faces de toutes les lettres doivent être sur le même plan pour que le biseautage fonctionne.UseMerge = Bascule entre la fusion (1) et l'union (0).Text_Space(Font, String, Size, Spacing). Calcule la longueur d'un texte, incluant les espaces, cela renvoie la longueur de toutes les n lettres. Text_Space donne l'espace qu'un texte, ou un glyphe, occupe pour son voisinage.
Paramètres :
Font = Une chaîne spécifiant la police à utiliser.String = La chaîne de texte générant l'objet.Size = Une valeur de taille.Spacing = La quantité d'espace à ajouter entre les caractères.Text_Width(Font, String, Size, Spacing). Calcule la longueur d'un texte, et renvoie la longueur des premières n-1 lettres, plus la longueur du glyphe de la dernière lettre. Text_Width donne la longueur physique d'un texte, et si vous utilisez seulement une lettre, la longueur physique d'un glyphe.
Paramètres :
Font = Une chaîne spécifiant la police à utiliser.String = La chaîne de texte générant l'objet.Size = Une valeur de taille.Spacing = La quantité d'espace à ajouter entre les caractères.Align_Left, Align_Right, Align_Center. Ces constantes sont utilisées par la macro Circle_Text().
Circle_Text(Font, String, Size, Spacing, Depth, Radius, Inverted, Justification, Angle). Crée un objet texte avec le haut des cellules de caractères sur un arc de cercle. Cette macro doit être utilisée dans un bloc object{...}.
Paramètres :
Font = Une chaîne spécifiant la police à utiliser.String = La chaîne de texte générant l'objet.Size = Une valeur de taille.Spacing = La quantité d'espace à ajouter entre les caractères.Depth = L'épaisseur de l'objet texte.Radius = Le rayon du cercle alignant les lettres.Inverted = Contrôle quelle part du texte fait face à l'extérieur. Si ce paramètre est non nul, le haut des lettres pointe vers le centre du cercle. Sinon, le bas des lettres le fera.Justification = Align_Left, Align_Right ou Align_Center.Angle = Le point du cercle où commencera le rendu. La direction +x est 0 et la direction +y est 90 (c.a.d. que l'angle croît dans le sens inverse des aiguilles d'une montre).Wedge(Angle). Cette macro crée une forme anguleuse infinie, une intersection entre deux plans. C'est principalement utile dans le CSG, par exemple pour obtenir l'arc spécifique d'un tore. Le bord de l'angle est positionné le long de l'axe y, et un côté est fixé au plan zy, l'autre côté tourne dans le sens des aiguilles d'une montre autour de l'axe y.
Paramètres :
Angle = L'angle, en degrés, entre les côtés de la forme anguleuse.Spheroid(Center, Radius). Cette macro crée une sphère de dimension inégale. Le rayon est un vecteur où chaque composant est le rayon le long de cet axe.
Paramètres :
Center = Centre du sphéroïde.Radius = Un vecteur spécifiant les rayons du sphéroïde.Supertorus(MajorRadius, MinorRadius, MajorControl, MinorControl, Accuracy, MaxGradient). Cette macro crée une isosurface du tore équivalente au superellipsoïde. Si vous spécifiez un MaxGradient de moins de 1, une évaluation sera utilisée. Vous devrez ajuster MaxGradient pour combler les paramètres choisis, un supertore carré aura un plus haut gradiant. Vous pouvez vouloir utiliser la fonction seule sur votre propre isosurface.
Paramètres :
MajorRadius, MinorRadius = Les rayons de base du tore.MajorControl, MinorControl = Contrôle l'arrondi du supertore. Utilisez des nombres dans la fourchette [0, 1].Accuracy = Le paramètre d'exactitude.MaxGradient = Le paramètre max_gradient.Supercone(EndA, A, B, EndB, C, D). Cette macro crée un objet similaire à un cône, mais où les terminaisons sont des ellipses. L'objet est une intersection d'un quartique et d'un cylindre.
Paramètres :
EndA = Centre de la fin A.A, B = Contrôle le rayon de la fin A.EndB = Centre de la fin B.C, D = Contrôle le rayon de la fin B.Connect_Spheres(PtA, RadiusA, PtB, RadiusB). Cette macro crée un cône qui joint doucement deux sphères. Elle ne crée que l'objet cône, par conséquent, vous devez fournir les sphères ou utiliser la macro Round_Cone2().
Paramètres :
PtA = Centre de la sphère A.RadiusA = Rayon de la sphère A.PtB = Centre de la sphère B.RadiusB = Rayon de la sphère B.Wire_Box_Union(PtA, PtB, Radius),. Crée une boîte fil-de-fer avec des cylindres et des sphères. L'objet entrera entièrement dans un objet boîte avec les mêmes coins.
Wire_Box_Merge(PtA, PtB, Radius),
Wire_Box(PtA, PtB, Radius, UseMerge)
Paramètres :
PtA = Coin devant, en bas, à gauche de la boîte.PtB = Coin en haut, à droite, en arrière de la boîte.Radius = Le rayon des cylindres et des sphères composant l'objet.UseMerge = Utilisation ou non de la fusion.Round_Box_Union(PtA, PtB, EdgeRadius),. Crée une boîte à bords arrondis depuis d'autres boîtes, cylindres et sphères. L'objet entrera entièrement dans un objet boîte avec les mêmes coins. Le résultat est légèrement différent d'un superellipsoïde qui n'a pas d'aires vraiment planes.
Round_Box_Merge(PtA, PtB, EdgeRadius),
Round_Box(PtA, PtB, EdgeRadius, UseMerge)
Paramètres :
PtA = Coin devant, en bas, à gauche de la boîte.PtB = Coin en haut, à droite, en arrière de la boîte.EdgeRadius = Le rayon des angles de la boîte.UseMerge = Utilisation ou non de la fusion.Round_Cylinder_Union(PtA, PtB, Radius, EdgeRadius),. Crée un cylindre avec des bords arrondis depuis des cylindres et des tores. L'objet entrera complètement dans un objet cylindre ayant les mêmes terminaisons et rayon. Le résultat est légèrement différent d'un superellipsoïde, qui n'a pas d'aire vraiment plane.
Round_Cylinder_Merge(PtA, PtB, Radius, EdgeRadius),
Round_Cylinder(PtA, PtB, Radius, EdgeRadius, UseMerge)
Paramètres :
PtA, PtB = Les points terminaux du cylindre.Radius = Le rayon du cylindre.EdgeRadius = Le rayon des bords du cylindre.UseMerge = Utilisation ou non de la fusion.Round_Cone_Union(PtA, RadiusA, PtB, RadiusB, EdgeRadius), Crée un cône avec des bords arrondis depuis des cônes et des tores. Le résultat tiendra entièrement dans un objet cône avec les mêmes points de terminaison et rayons.
Round_Cone_Merge(PtA, RadiusA, PtB, RadiusB, EdgeRadius),
Round_Cone(PtA, RadiusA, PtB, RadiusB, EdgeRadius, UseMerge)
Paramètres :
PtA, PtB = Les points de fin du cône.RadiusA, RadiusB = Le rayon du cône.EdgeRadius = Le rayon des bords du cône.UseMerge = Utilisation ou non de la fusion.Round_Cone2_Union(PtA, RadiusA, PtB, RadiusB),. Crée un cône avec des bords arrondis depuis un cône et deux sphères. Le résultat n'entrera pas exactement dans un objet cône avec les mêmes terminaisons et rayon à cause des fins sphériques. Les points de terminaison ne sont pas utilisés pour la portion cônique, mais pour les sphères, un cône approprié est alors généré pour les joindre doucement.
Round_Cone2_Merge(PtA, RadiusA, PtB, RadiusB),
Round_Cone2(PtA, RadiusA, PtB, RadiusB, UseMerge)
Paramètres :
PtA, PtB = Les centres des terminaisons sphériques.RadiusA, RadiusB = Le rayon des terminaisons sphériques.UseMerge = Utilisation ou non de la fusion.Round_Cone3_Union(PtA, RadiusA, PtB, RadiusB),. Comme
Round_Cone3_Merge(PtA, RadiusA, PtB, RadiusB)
Round_Cone3(PtA, RadiusA, PtB, RadiusB, UseMerge)Round_Cone2(), cela crée un cône avec des bords arrondis depuis un cône et deux sphères, et l'objet ne tiendra pas exactement dans un objet cône avec les mêmes terminaisons et rayon à cause des fins sphériques. La différence est que cette macro prend les points des terminaisons pour la portion cônique et déplace les sphères pour se fondre avec la surface, au lieu de les poser aux points de terminaison et générer un cône pour les joindre.
Paramètres :
PtA, PtB = Les points de fin du cône.RadiusA, RadiusB = Le rayon du cône.UseMerge = Utilisation ou non de la fusion.Quad(A, B, C, D) et Smooth_Quad(A, NA, B, NB, C, NC, D, ND). Ces macros créent des objet polygonaux à 4 faces en utilisant des paires de triangles.
Paramètres :
A, B, C, D = Sommets du quadruplet.NA, NB, NC, ND = Normales aux sommets du quadruplet.Il y a plusieurs macros HF dans shapes.inc, qui génèrent des maillages de différentes formes. Toutes les macros HF ont ceci en commun :
L'utilisation des différentes macros HF est décrite plus bas.
HF_Square (Function, UseUVheight, UseUVtexture, Res, Smooth, FileName, MnExt, MxExt). Cette macro génère un maillage dans un champ de niveaux carré, identique à la primitive intégrée de champ de niveaux. Voyez aussi la description générale de la macro HF au-dessus.
Paramètres :
Function = La fonction à utiliser pour déformer le champ de niveaux.UseUVheight = Une valeur booléenne disant à la macro s'il faut utiliser l'application de hauteur UV.UseUVtexture = Une valeur booléenne disant à la macro s'il faut utiliser l'application de texture UV.Res = Un vecteur 2D spécifiant la résolution du maillage généré.Smooth = Une valeur booléenne disant à la macro s'il faut adoucir le maillage généré.FileName = Le nom du fichier en sortie.MnExt = Coin avant, en bas, à gauche d'une boîte contenant le champ de niveaux.MxExt = Coin arrière, en haut, à droite d'une boîte contenant le champ de niveaux.HF_Sphere(Function, UseUVheight, UseUVtexture, Res, Smooth, FileName, Center, Radius, Depth). Cette macro génère un maillage de la forme d'un champ de niveaux sphérique. Quand l'application UV est utilisée, le carré UV sera appliqué autour de la sphère en commençant à +x et allant dans le sens inverse des aiguilles d'une montre autour de l'axe y. Voir aussi la description générale des macros HF au-dessus.
Paramètres :
Function = La fonction à utiliser pour déformer le champ de niveaux.UseUVheight = Une valeur booléenne disant à la macro s'il faut utiliser l'application de hauteur UV.UseUVtexture = Une valeur booléenne disant à la macro s'il faut utiliser l'application de texture UV.Res = Un vecteur 2D spécifiant la résolution du maillage généré.Smooth = Une valeur booléenne disant à la macro s'il faut adoucir le maillage généré.FileName = Le nom du fichier en sortie.Center = Le centre du champ de niveaux avant son déplacement, le déplacement peut, et le fera probablement, décentrer l'objet.Radius = Le rayon de départ de la sphère, avant le déplacement.Depth = La profondeur du champ de niveaux.HF_Cylinder(Function, UseUVheight, UseUVtexture, Res, Smooth, FileName, EndA, EndB, Radius,Depth). Cette macro génère un maillage de la forme d'un champ de niveaux cylindrique ouvert. Quand l'application UV est utilisée, le carré UV sera appliqué autour du cylindre. Voir aussi la description générale des macros HF au-dessus.
Paramètres :
Function = La fonction à utiliser pour déformer le champ de niveaux.UseUVheight = Une valeur booléenne disant à la macro s'il faut utiliser l'application de hauteur UV.UseUVtexture = Une valeur booléenne disant à la macro s'il faut utiliser l'application de texture UV.Res = Un vecteur 2D spécifiant la résolution du maillage généré.Smooth = Une valeur booléenne disant à la macro s'il faut adoucir le maillage généré.FileName = Le nom du fichier en sortie.EndA, EndB = Les points terminaux du cylindre.Radius = Le rayon (avant déplacement) du cylindre.Depth = La profondeur du champ de niveaux.HF_Torus (Function, UseUVheight, UseUVtexture, Res, Smooth, FileName, Major, Minor, Depth). Cette macro génère un maillage de la forme d'un champ de niveau torique. Quand l'application UV est utilisée, le carré UV est appliqué autour comme pour l'application sphérique ou cylindrique. Toutefois, les bords de l'application passent au-dessus et en-dessous du tore où ils se rencontrent sur l'anneau interne. Voir aussi la description générale des macros HF au-dessus.
Paramètres :
Function = La fonction à utiliser pour déformer le champ de niveaux.UseUVheight = Une valeur booléenne disant à la macro s'il faut utiliser l'application de hauteur UV.UseUVtexture = Une valeur booléenne disant à la macro s'il faut utiliser l'application de texture UV.Res = Un vecteur 2D spécifiant la résolution du maillage généré.Smooth = Une valeur booléenne disant à la macro s'il faut adoucir le maillage généré.FileName = Le nom du fichier en sortie.Major = Le rayon majeur du tore.Minor = Le rayon mineur du tore.Ellipsoid, SphereCylinder_X, Cylinder_Y, Cylinder_ZQCone_X, QCone_Y, QCone_ZCone_X, Cone_Y, Cone_ZPlane_YZ, Plane_XZ, Plane_XYParaboloid_X, Paraboloid_Y, Paraboloid_ZHyperboloid, Hyperboloid_YUnitBox, CubeDisk_X, Disk_Y, Disk_ZTetrahedronOctahedronDodecahedronIcosahedronRhomboidHexagonHalfCone_YPyramidPyramid2Square_X, Square_Y, Square_ZBicornCrossed_TroughCubic_CylinderCubic_Saddle_1Devils_CurveFoliumGlob_5Twin_GlobHelix, Helix_1Hyperbolic_TorusLemniscateQuartic_Loop_1Monkey_Saddlez = c (x^3 - 3 x y^2)Parabolic_Torus_40_12PiriformQuartic_ParaboloidQuartic_CylinderSteiner_SurfaceTorus_40_12Witch_HatSinsurf| 3.6.13 skies.inc, stars.inc |