2017-08-28 2 views
2

J'essaie d'ajouter du texte à une sphère - des étiquettes sur les nœuds d'un graphique. Par exemple, dans le graphique ci-dessous, j'aimerais que chaque nœud soit étiqueté. Par exemple, dans le graphique ci-dessous.Ajouter du texte à la surface de la sphère

#include "colors.inc" 

global_settings { 
    assumed_gamma 1.0 
    ambient_light Gray 
} 
light_source { <100,00,-150> color White } 
camera { 
    sky <0, 0, -1> 
    look_at <0, 0, 0> 
    location <20, -80, -160> 
} 
plane { <0,0,-1>, 0 
    pigment { color White } 
} 

sphere { 
< -50,-33,-50 > , 8 
texture { pigment { color rgb 0.7 }} 
}  
sphere { 
< 50,-50,-50 > , 8 
texture { pigment { color rgb<1.0, 0.0, 0.0> }} 
}  
cylinder { 
< -50,-33,-50 >, < 50,-50,-50 > ,1 
texture { pigment { color rgb 0.5 }} 
} 

Je peux ajouter du texte à l'intrigue en général, mais ce n'est pas sur les sphères de surface

text{ttf "crystal.ttf", "word", 0, 0 
      pigment {Black} 
      scale 10 
      translate < -50,-33,-50 > 
    } 

De navigation sur le Web, je pense qu'il peut être possible d'ajouter le texte comme une texture à la sphère , mais je n'ai eu aucun succès - aucun texte n'apparaît.

#macro my_node(Text) 

    #declare word=texture{ 
        pigment{object{ 
          text{ttf "crystal.ttf", Text, 0, 0 pigment {Black} scale 25} 
          colour Clear } 
          } 
         } 
sphere {< 0, 0, 0>, 8 
       texture { pigment { color rgb 0.7 }} 
       texture{word} 
      } 
#end    

object {my_node("word") 
      translate < -50,-33,-50 > 
     } 

My question: Comment puis-je ajouter des étiquettes sur une sphère s'il vous plaît. merci

+0

Il est possible d'écrire 'povray' une texture qui dépend d'une fonction, qui est déterminée par l'intérieur d'un objet, qui peut être un objet texte. Je ne connais pas les détails du haut de ma tête (je devrais les rechercher moi-même à partir de la documentation 'povray'), mais en dehors de l'utilisation pure et simple d'une texture qui dépend de l'entrée d'image du disque, je crois le seul moyen d'obtenir une texture contenant du texte. – cmaster

+0

@cmaster; merci pour l'info - sons prometteurs, en ce sens que cela pourrait être possible. – user2957945

+0

ce que le commentaire de cmaster mentionné est ce que vous essayez de faire déjà. Cela ne va pas courber le texte le long de la sphère, et si vous le faites fonctionner, il sera déformé de toute façon. Mais pour commencer, essayez de faire correspondre les tailles de sphère et de texture que vous avez là - je suggère d'essayer de tout rendre à la taille de l'unité, près de l'origine et de traduire après cela. (ainsi, déposez cette "échelle 25" et placez une sphère avec le rayon 1. Quand vous voyez du texte, commencez à frissonner avec les transformations) – jsbueno

Répondre

2

Donc, j'ai fait quelques tests, et en effet, le motif de pigment "objet" va travailler pour vous. Comme je l'ai écrit dans le commentaire ce qui semble être éteint est que vous dessinez votre objet de pigment "Word" dans un endroit, et la sphère se trouve ailleurs, donc il n'y a pas d'intersection, et la sphère est dessinée seulement sur " Couleur.

J'ai créé cet exemple de fichier - observez que je spécifie soigneusement à la fois mon objet texturé et ma sphère (à peu près < -1, -1, -1> < 1, 1, 1> deux- unité-cube). L'objet texte a des états de traduction et d'échelle de sorte qu'il est centré à < 0,0,0> - POVRay pour autant que je sache ne pas avoir de fonctions de "mesure de texte", donc vous devez centrer votre texte par "feeling" et "eye" "- la seule mesure que vous obtenez est que la hauteur du caractère est de 1 unité maximum. Si vous utilisez une police à espacement fixe, vous pouvez connaître la largeur exacte de chaque caractère, ce qui peut faciliter les choses. Ensuite, lors de la création de la sphère, et en appliquant le texte comme texture, je le redimensionne sur l'axe Z, pour assurer que les lettres traversent la surface de la sphère - sinon le texte se trouverait «à l'intérieur» de la sphère.

Comme je l'ai mentionné sur le commentaire, cela crée du texte "plat" sur une sphère courbe, et il n'y a pas de moyen facile de déformer le texte qui suit la sphère.

Donc, c'est ce qui a fonctionné pour moi. (Notez qu'il nécessite le fichier « drodisans.ttf » être dans le même dossier)

#version 3.7 
#include "colors.inc" 


camera { 
    location <0, 0, -8> 
    look_at 0 
} 

#declare Label1 = object { 
    text { 
     ttf "droidsans.ttf", "Hello POV-Ray", 1, 0 
     pigment {color Blue} 
    } 
    scale <0.3, 1, 1> 
    translate <-1, -.35, -.5> 
} 

sphere { 
    0, 1 
    texture { 
     pigment {object {Label1 color Blue color Red} } 
     finish { 
      phong 1 
      ambient 0.2 
     } 
     scale <.7, .5, 10> 
    } 
    translate <0, -.5, 0> 
} 


light_source { 
    <0, 2, -4> 
    color White 
} 

Maintenant, une autre façon de le faire, cela vous donnerait plus de contrôle sur le texte, et permettent même le texte En fait "envelopper" la sphère, est d'utiliser une image comme image_map, à partir d'un fichier séparé. Cela vous obligerait à pré-rendre vos étiquettes en tant qu'images, en utilisant un autre programme (il pourrait même être POVRay lui-même, ou vous pourriez le faire à partir d'un extrait de postscript en utilisant Ghostscript). Le "image_map" directive traite le fichier image comme un carré Unity projeté sur le < 0, 0, 0> à < 1, 1, 0> carré, s'étendant à l'infini sur l'axe z. Mais peut-être, en raison du processus de rendu en deux étapes nécessaire ici, vous devriez vous en tenir à l'autre approche, sauf si vous avez du mal à positionner votre texte là-bas. (Le centrage doit être fait "manuellement", comme je l'ai expliqué).

Notez que l'une ou l'autre méthode vous obligera à "assembler vos objets" à l'origine, et à traduire et mettre à l'échelle après cela.

eImage rendered by the script above