3.6.7 functions.inc

Ce fichier inclus contient des interfaces pour des fonctions internes comme pour plusieurs fonctions prédéfinies. L'ID utilisé pour accéder aux fonctions internes à travers des appels de internal(XX), n'est pas garanti rester le même entre les versions de POV-Ray, aussi les utilisateurs sont encouragés à utiliser les fonctions déclarées ici.

Le nombre de paramètres requis, et ce qu'ils contrôlent, est aussi donné dans le fichier inclus, ce chapitre donne plus d'information.
Pour les valeurs de démarrage des paramètres, voyez le fichier de démonstration "i_internal.pov".

Syntaxe à utiliser :

#include "functions.inc"
isosurface {
	function {f_torus_gumdrop(x, y, z, P0)}
	...
}

pigment {
	function {f_cross_ellipsoids(x, y, z, P0, P1, P2, P3)}
	COLOR_MAP ...
}

Quelques paramètres spéciaux sont trouvés dans plusieurs de ces fonctions. Ils sont décrits dans la section suivante et référencés plus tard comme les paramètres "Cross section type", "Field Strength", "Field Limit", "SOR".

3.6.7.1 Les paramètres communs

Type de croisement :
Dans les fonctions spirales et hélices, le neuvième paramètre est le type de croisement.
Quelques formes sont :

0 :
carré
0.0 à 1.0 :
carrés arrondis
1 :
cercle
1.0 à 2.0 :
diamants arrondis
2 :
diamant
2.0 à 3.0 :
diamants partiellement concaves
3 :
diamant concave
3.6.7.1.1 Force du champ

La valeur numérique en un point de l'espace générée par la fonction est multipliée par la force du champ. La série de points où la fonction donne zéro est non affectée par toute valeur positive de ce paramètre, aussi, si vous utilisez la fonction telle quelle avec threshold = 0, la surface générée est la même.
Dans quelques cas, la force du champ a un effet considérable sur la vitesse et l'exactitude du rendu de la surface. En général, l'augmentation de la force du champ accélère le rendu, mais si vous mettez une valeur trop haute, la surface commencera à se briser et pourra disparaître complètement.
Mettre une valeur négative à la force du champ produit une inversion de la surface, comme si la fonction était négative.

3.6.7.1.2 Limite du champ

Cela ne fera aucune différence à la surface générée si vous utilisez un seuil qui est dans la limite du champ (et détruira complètement la surface si le seuil est plus grand que la limite du champ). Toutefois, cela peut faire une grande différence dans les temps de rendu.
Si vous utilisez la fonction pour générer un pigment, alors tous les points qui seront éloignés de la surface auront la même couleur, celle qui correspond à la valeur de la limite du champ.

3.6.7.1.3 Commutateur du SOR

S'il est plus grand que zéro, la courbe est glissée comme une surface de révolution (SOR).
Si la valeur est zéro ou négative, la courbe est extrudée linéairement dans la direction z.

3.6.7.1.4 Offset du SOR

Si le commutateur SOR est activé, alors la courbe est déplacée de cette distance dans la direction x avant d'être glissée.

3.6.7.1.5 Angle du SOR

Si le commutateur SOR est activé, alors la courbe est tournée de ce nombre de degrés selon l'axe z avant d'être glissée.

3.6.7.1.6 Inversion de l'isosurface

Quelque fois, quand vous rendez une surface, vous pouvez trouver que vous n'obtenez que la forme du conteneur. Cela est peut être causé par le fait que certaines fonctions construisent vers l'extérieur.
Nous pouvons inverser l'isosurface en rendant négative la totalité de la fonction :
-(function) - threshold

3.6.7.2 Les fonctions internes

Voivi une liste des fonctions internes dans l'ordre de leur apparition dans le fichier inclus "functions.inc".


f_algbr_cyl1(x,y,z, P0, P1, P2, P3, P4). Un cylindre algébrique est ce que vous obtenez si vous prennez une courbe en 2D et la projetez en 3D. La courbe 2D est simplement extrudée le long du troisième axe, l'axe z dans ce cas.
Avec le SOR Switch activé, la courbe sera tournée sur l'axe y au lieu d'être extrudée le long de l'axe z.


f_algbr_cyl2(x,y,z, P0, P1, P2, P3, P4). Un cylindre algébrique est ce que vous obtenez si vous prennez une courbe en 2D et la projetez en 3D. La courbe 2D est simplement extrudée le long du troisième axe, l'axe z dans ce cas.
Avec le SOR Switch activé, la courbe sera tournée sur l'axe y au lieu d'être extrudée le long de l'axe z.


f_algbr_cyl3(x,y,z, P0, P1, P2, P3, P4). Un cylindre algébrique est ce que vous obtenez si vous prennez une courbe en 2D et la projetez en 3D. La courbe 2D est simplement extrudée le long du troisième axe, l'axe z dans ce cas.
Avec le SOR Switch activé, la courbe sera tournée sur l'axe y au lieu d'être extrudée le long de l'axe z.


f_algbr_cyl4(x,y,z, P0, P1, P2, P3, P4). Un cylindre algébrique est ce que vous obtenez si vous prennez une courbe en 2D et la projetez en 3D. La courbe 2D est simplement extrudée le long du troisième axe, l'axe z dans ce cas.
Avec le SOR Switch activé, la courbe sera tournée sur l'axe y au lieu d'être extrudée le long de l'axe z.


f_bicorn(x,y,z, P0, P1). La surface est une surface de révolution.


f_bifolia(x,y,z, P0, P1). La surface bifoliaire ressemble à la partie haute d'un paraboloïde englobé par dessous par un autre paraboloïde.


f_blob(x,y,z, P0, P1, P2, P3, P4). Cette fonction génère des blobs qui sont similaires au blob d'un CSG avec deux composants sphériques. Cette fonction semble ne fonctionner qu'avec un seuil négatif.


f_blob2(x,y,z, P0, P1, P2, P3). Cette surface est similaire à un blob CSG avec deux composants sphériques.


f_boy_surface(x,y,z, P0, P1). Pour cette surface, cela aide si la force du champ est basse, autrement la surface a tendance à se briser ou à disparaître complètement. Cela a le désavantage de rendre les temps de rendu extrèmement longs.


f_comma(x,y,z, P0). La surface 'comma' ressemble beaucoup à la forme d'une virgule.


f_cross_ellipsoids(x,y,z, P0, P1, P2, P3). La surface 'cross ellipsoids' est comme l'union de trois ellipsoïdes croisés, chacun orienté sur un axe.


f_crossed_trough(x,y,z, P0)


f_cubic_saddle(x,y,z, P0). Pour cette surface, cela aide si la force du champ est basse, autrement la surface a tendance à se briser ou à disparaître complètement.


f_cushion(x,y,z, P0)


f_devils_curve(x,y,z, P0)


f_devils_curve_2d(x,y,z, P0, P1, P2, P3, P4, P5). La courbe f_devils_curve_2d peut être extrudée le long de l'axe z, ou en utilisant les paramètres SOR elle peut faire une surface de révolution. Les facteurs X et Y contrôlent la taille de l'élément central.


f_dupin_cyclid(x,y,z, P0, P1, P2, P3, P4, P5)


f_ellipsoid(x,y,z, P0, P1, P2). f_ellipsoid génère des sphères et des ellipsoïdes. Elle a besoin de "threshold 1".
Mettre ce paramètre de dimension à 1/n donne exactement le même effet qu'une opération de dimensionnement pour augmenter la taille par n dans la direction correspondante.


f_enneper(x,y,z, P0)


f_flange_cover(x,y,z, P0, P1, P2, P3)


f_folium_surface(x,y,z, P0, P1, P2). Une 'surface foliaire' ressemble à quelque chose comme un paraboloïde collé à un plan.


f_folium_surface_2d(x,y,z, P0, P1, P2, P3, P4, P5). La courbe f_folium_surface_2d peut être tournée autour de l'axe x pour générer la même surface 3D que f_folium_surface, ou elle peut être extrudée dans la direction z (en désactivant le commutateur SOR)


f_glob(x,y,z, P0). Une partie de cette surface s'échappe à l'infini si elle n'est pas contrainte par une forme conteneur.


f_heart(x,y,z, P0)


f_helical_torus(x,y,z, P0, P1, P2, P3, P4, P5, P6, P7, P8, P9). Avec certaines séries de paramètres, cela ressemble à un tore avec une enroulement hélicoïdal autour. L'enroulement peut avoir optionnellement des sillons sur son bord.


f_helix1(x,y,z, P0, P1, P2, P3, P4, P5, P6)


f_helix2(x,y,z, P0, P1, P2, P3, P4, P5, P6). Nécessite une fonction négative


f_hex_x(x,y,z, P0). Cela crée une grille de cylindres allongés le long de l'axe z. L'épaisseur est contrôlée par la valeur seuil. Quand cette valeur est égale à 0.8660254 ou cos(30), les côtés se touchent, parce que c'est la distance entre les centres. Rendre la fonction négative inversera la surface et créera une structure en nid d'abeille. Cette fonction est aussi utile comme fonction de pigment.


f_hex_y(x,y,z, P0). Cette fonction forme un treillage de boîtes infines couchées le long de l'axe z. L'épaisseur est contrôlée par la valeur du seuil. C'est boîtes sont pivotées de 60 degrés autour des centres, qui sont à 0.8660254 ou cos(30) les uns des autres. Cette fonction est aussi utile comme fonction de pigment.


f_hetero_mf(x,y,z, P0, P1, P2, P3, P4, P5). f_hetero_mf (x,0,z) fais des champs de niveaux multifractals et des modèles de bruit '1/f'.
'Multifractal' fait référence à leur caractéristique d'avoir une dimension fractale qui varie avec l'altitude. Construite depuis la somme des bruits sur un certain nombre de fréquences, les paramètres déterminent combien, et quelles fréquences doivent être cumulées.
L'avantage d'utiliser ceci au lieu du height_field {} d'une image (un certain nombre de programmes de champs de niveaux ont des images de type multifractal en sortie) est que le domaine de la fonction s'étend arbitrairement dans les directions x et z, aussi de vastes paysages peuvent être faits sans perte de la résolution à cause de l'étirement d'un champ de niveaux. D'autres fonctions intéressantes sont f_ridged_mf et f_ridge.


f_hunt_surface(x,y,z, P0)


f_hyperbolic_torus(x,y,z, P0, P1, P2)


f_isect_ellipsoids(x,y,z, P0, P1, P2, P3). Cette surface 'ellipsoïde isect' est comme l'intersection de trois ellipsoïdes, chacun orienté selon un axe.


f_kampyle_of_eudoxus(x,y,z, P0, P1, P2). Le 'kampyle of eudoxus' est comme deux plans infinis avec une faussette au centre.


f_kampyle_of_eudoxus_2d(x,y,z, P0, P1, P2, P3, P4, P5) La courbe 2D qui génère cette surface peut être extrudée dans la direction z ou mise en rotation selon divers axes en utilisant les paramètres SOR.


f_klein_bottle(x,y,z, P0)


f_kummer_surface_v1(x,y,z, P0). La surface de Kummer consiste en une collection de tiges disposées en rayons.


f_kummer_surface_v2(x,y,z, P0, P1, P2, P3). La version 2 de la surface de Kummer ressemble seulement à des tiges en rayon quand les paramètres sont placés sur des valeurs négatives particulières. Pour les valeurs positives, elle tend à ressembler à un superellipsoïde.


f_lemniscate_of_gerono(x,y,z, P0). La surface "Lemniscate de Gerono" est une forme de sablier. Deux larmes connectées par leurs bouts.


f_lemniscate_of_gerono_2d(x,y,z, P0, P1, P2, P3, P4, P5). Cette version 2D du Lemniscate peut être extrudée dans la direction z, ou utilisée comme surface de révolution pour générer l'équivalence de la version 3D, ou pivotée de différentes façons.


f_mesh1(x,y,z, P0, P1, P2, P3, P4) L'épaisseur globale des fils est contrôlée par le seuil de l'isosurface, pas par un paramètre. Si vous rendez un mesh1 avec aucun seuil, l'épaisseur des fils est nulle et ils sont invisibles. Les paramètres P2 et P4 contrôlent la forme du fil en relation avec ce paramètre de seuil.


f_mitre(x,y,z, P0). La surface 'Mitre' ressemble à un ellipsoïde pincé à chaque extrémité.


f_nodal_cubic(x,y,z, P0). Le 'Nodal Cubic' est quelque chose comme ce que vous avez en extrudant la courbe Stophid2D le long de l'axe x puis en la penchant.


f_noise3d(x,y,z)


f_noise_generator(x,y,z, P0)


f_odd(x,y,z, P0)


f_ovals_of_cassini(x,y,z, P0, P1, P2, P3). Les ovales de Cassini sont une généralisation des formes de tores.


f_paraboloid(x,y,z, P0). Ce paraboloïde est la surface de révolution que vous obtenez si vous faites pivoter une parabole autour de l'axe y.


f_parabolic_torus(x,y,z, P0, P1, P2)


f_ph(x,y,z) = atan2( sqrt( x*x + z*z ), y )
Utilisée seule, la fonction "PH" donne une surface qui consiste en tous points se trouvant à une latitude particulière, ex. un cône. Si vous utilisez un seuil à zéro (le défaut) cela donne un cône de hauteur zéro, qui est invisible. Voyez aussi f_th et f_r


f_pillow(x,y,z, P0)


f_piriform(x,y,z, P0). La surface piriforme ressemble à un demi lemniscate.


f_piriform_2d(x,y,z, P0, P1, P2, P3, P4, P5, P6). La version 2D de "Piriform" peut être extrudée dans la direction z, ou utilisée comme surface de révolution pour générer l'équivalent de la version 3D.


f_poly4(x,y,z, P0, P1, P2, P3, P4). Ce f_poly4 peut être utilisé pour générer une surface de révolution de tout polynôme jusqu'au quatrième degré.
En d'autres mots : si nous appellons les paramètres A, B, C, D, E; alors cette fonction génère la surface de révolution formée par la rotation de "x = A + By + Cy2 + Dy3 + Ey4" autour de l'axe y.


f_polytubes(x,y,z, P0, P1, P2, P3, P4, P5). La surface 'Polytubes' consiste en un certain nombre de tubes. Chaque tube suit une courbe 2D qui est spécifiée par un plynôme de quatrième degré ou moins. Si vous regardez les paramètres, cette fonction génère "P0" tubes qui suivent tous l'équation " x = P1 + P2y + P3y2 + P4y3 + P5y4 " autour de l'axe y.
Cette fonction demande un seuil positif (épaisseur des tubes).


f_quantum(x,y,z, P0). Cela ressemble à la forme du nuage de densité d'un électron de l'orbite d.


f_quartic_paraboloid(x,y,z, P0). Le 'Quartic Paraboloid' est similaire au paraboloïde, mais il a une forme cubique.


f_quartic_saddle(x,y,z, P0). Le 'Quartic saddle' est similaire à une selle, mais il a une forme cubique.


f_quartic_cylinder(x,y,z, P0, P1, P2). Le 'Quartic cylinder' ressemble un peu à un cylindre qui a avalé un oeuf.


f_r(x,y,z) = sqrt( x*x + y*y + z*z )
Utilisé seule, la fonction "R" donne une surface constituée de tous les points à une distance spécifique (valeur seuil) de l'origine, c.a.d. une sphère. Regardez aussi à f_ph et f_th


f_ridge(x,y,z, P0, P1, P2, P3, P4, P5). Cette fonction est principalement dédiée pour modifier d'autres surfaces comme lorsque vous utilisez un champ de niveaux ou une fonction pigment. Les autres fonctions d'intérêt sont f_hetero_mf et f_ridged_mf.


f_ridged_mf(x,y,z, P0, P1, P2, P3, P4, P5). La surface "Ridged Multifractal" peut être utilisée pour créer des champs de niveaux multifractals et des modèles. 'Multifractal' fait référence à leur caractéristique d'avoir une dimension fractale qui varie avec l'altitude. Elles sont construites par la somme de bruits de plusieurs fréquences. Les paramètres f_ridged_mf déterminent combien, et quelles fréquences doivent être additionnées, et le poids de chacune de ces fréquences dans la somme.
Un avantage à son utilisation au lieu de height_field{} depuis une image est que le domaine de la fonction ridged_mf s'étend arbitrairement dans les directions x et z, aussi de gigantesques paysages peuvent être faits sans perdre la résolution ou avoir à étirer un champ de niveaux. D'autres fonctions intéressantes sont f_hetero_mf et f_ridge.


f_rounded_box(x,y,z, P0, P1, P2, P3). La boîte arrondie est définie dans un cube de <-1,-1,-1> à <1, 1, 1>. En changeant le paramètre scale, la taille peut être ajustée, sans affecter le rayon de la courbure.


f_sphere(x,y,z, P0)


f_spikes(x,y,z, P0, P1, P2, P3, P4)


f_spikes_2d(x,y,z, P0, P1, P2, P3) = fonction 2D : f = f( x, z ) - y


f_spiral(x,y,z, P0, P1, P2, P3, P4, P5)


f_steiners_roman(x,y,z, P0). Le "Steiners Roman" est composé de quatre triangles identiques faisant ensembles une sorte de tetrahedron arrondi. Ils croissent le long des axes x, y et z lorsqu'ils se rencontrent.


f_strophoid(x,y,z, P0, P1, P2, P3). Le "Strophoid" est comme un plan infini avec un bulbe en jaillissant.


f_strophoid_2d(x,y,z, P0, P1, P2, P3, P4, P5, P6). La courbe strophoïde de second degré peut être extrudée dans la direction z ou pivotée selon divers axes en utilisant les paramètres SOR.


f_superellipsoid(x,y,z, P0, P1). Demande une force de champ négative ou une fonction négative.


f_th(x,y,z) = atan2( x, z )
f_th() est une fonction qui n'est utile que combinée avec d'autres surfaces.
Elle produit une valeur qui est égale à l'angle "theta", en radians, en tout point. L'angle théta est comme la coordonnée longitudinale sur la Terre. Elle reste la même tandis que vous bougez du nord au sud, mais elle varie d'est en ouest. Voyez aussi f_ph et f_r.


f_torus(x,y,z, P0, P1)


f_torus2(x,y,z, P0, P1, P2). Cela est différent de la fonction f_torus qui n'a que les rayons mineurs et majeurs comme paramètres.


f_torus_gumdrop(x,y,z, P0). La surface "Torus Gumdrop" est quelque chose comme un tore avec un couple de bulles de gomme tenues par le bout.


f_umbrella(x,y,z, P0)


f_witch_of_agnesi(x,y,z, P0, P1, P2, P3, P4, P5). La surface "Witch of Agnesi" ressemble à un chapeau de sorcière.


f_witch_of_agnesi_2d(x,y,z, P0, P1, P2, P3, P4, P5). La seconde version de la courbe "Witch of Agnesi" peut être extrudée dans la direction z ou pivotée selon divers axes avec l'utilisation de paramètres SOR.

3.6.7.3 Les fonctions prédéfinies

eval_pigment(Pigm, Vect). Cette macro évalue la couleur du pigment en un point spécifique. Quelques pigments demandent plus d'information qu'un simple point, les pigments basés sur un motif d'inclinaisons par exemple, et ne fonctionneront pas avec cette macro. Toutefois, la plupart des pigments fonctionneront.
Paramètres:


f_snoise3d(x, y, z). Tout comme f_noise3d(), mais cela retourne des valeurs dans la fourchette [-1, 1].


f_sine_wave(val, amplitude, frequency). Transforme une onde triangulaire en onde sinusoïdale.


f_scallop_wave(val, amplitude, frequency). Transforme une onde triangulaire en onde scallop_wave.

3.6.7.3.1 Les fonctions de modèle

Les fonctions de modèles prédéfinies sont utiles dans la construction de modèles de fonction personnalisés ou pour effectuer des déplacements d'application sur les isosurfaces. La plupart d'entre elles ne sont pas réellement pratiques pour de tels objectifs, elles sont simplement inclues comme complément.

Certaines ne sont pas du tout intégrées car elles nécessitent des paramètres spéciaux qui doivent être spécifiés dans leur définition, ou des informations qui ne sont pas disponibles pour les fonctions de modèle. Pour cette raison, vous voudrez probablement définir vos propres versions de ces fonctions.

Toutes ces fonctions prennent trois paramètres, les coordonnées XYZ du point où évaluer le modèle.

f_agate(x, y, z)
f_boxed(x, y, z)
f_bozo(x, y, z)
f_brick(x, y, z)
f_bumps(x, y, z)
f_checker(x, y, z)
f_crackle(x, y, z)
Ce modèle a beaucoup plus d'options, cette fonction utilise les défauts.
f_cylindrical(x, y, z)
f_dents(x, y, z)
f_gradientX(x, y, z)
f_gradientY(x, y, z)
f_gradientZ(x, y, z)
f_granite(x, y, z)
f_hexagon(x, y, z)
f_leopard(x, y, z)
f_mandel(x, y, z)
Seulement le modèle >mandel de base est intégré, ses variants et les autres modèles de fractale ne sont pas intégrés.
f_marble(x, y, z)
f_onion(x, y, z)
f_planar(x, y, z)
f_radial(x, y, z)
f_ripples(x, y, z)
f_spherical(x, y, z)
f_spiral1(x, y, z)
f_spiral2(x, y, z)
f_spotted(x, y, z)
f_waves(x, y, z)
f_wood(x, y, z)
f_wrinkles(x, y, z)
3.6.6 finish.inc 3.6.6 finish.inc 3.6.8 glass.inc, glass_old.inc 3.6.8 glass.inc, glass_old.inc