2017-08-28 5 views
2

球体にテキストを追加しようとしています。グラフのノード上のラベルです。球面にテキストを追加する

たとえば、以下のグラフでは、各ノードにラベルを付けたいと思います。

#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 }} 
} 

私は一般的に、プロットにテキストを追加することができますが、それは球がWebブラウジングから

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

表面上に存在しない、私は球にテクスチャとしてテキストを追加することも可能であると思いましたしかし、私は成功していない - テキストが表示されません。

#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:私は球にラベルを追加することができますどのようにしてください。 ありがとう

+0

これはテキストオブジェクトであることができるオブジェクトの内部で決定される機能に依存テクスチャを記述するpovray' '可能です。私は私の頭の上から詳細を知ることはできません(私は 'povray'ドキュメンテーションから自分自身を見なければならないでしょう)が、ディスクからの画像入力に依存するテクスチャを使って離れて、私はそれがテキストを含むテクスチャを取得する唯一の方法です。 – cmaster

+0

@ cmaster;情報をいただきありがとうございます - 可能性があるという点で有望です。 – user2957945

+0

あなたがすでに何をしようとしているのか、cmasterのコメントが何を言いましたか?それは球に沿ってテキストをカーブさせません。そして、それを動作させると、とにかく歪んでしまいます。しかし、始めに、球とテクスチャのサイズを合わせてみてください。単位サイズですべてをレンダリングし、原点に近づけて、それを翻訳してみることをお勧めします。 (したがって、「スケール25」を落とし、半径1の球を配置します。テキストが表示されたら、変換を使ってぼかしを開始します) – jsbueno

答えて

2

私はいくつかのテストを行い、実際には、 "オブジェクト"の顔料パターンがあなたのために働くでしょう。私がこのコメントに書いたように、あなたは "Word"ピグメントオブジェクトを場所に描き、球は他の場所にあります。したがって、交差はなく、球は "外側"にのみ描かれています" 色。

このサンプルファイルを作成しました。私のテクスチャオブジェクトと私の球の両方が原点にあるように注意してください(おおよそ< -1、-1,1 -1> < 1,1,1>ユニテキューブ)。テキストオブジェクトには翻訳と縮尺のステートメントがありますので、中心には< 0,0,0> - 私が知っている限り「テキスト測定」機能がないので、テキストを「感情」と「目」で中央に配置する必要があります" - あなたが得る唯一の測定値は、文字の高さが1の最大値であるということです。モノスペースのフォントを使用すると、各文字の正確な幅を知ることができます。

球体を作成してテクスチャとしてテキストを適用すると、文字が球面を横切るようにZ軸上にスケールします。そうでなければ、テキストは球の内部にあります。

私がこのコメントに触れたように、これは曲がった球面上に「フラット」なテキストを作成し、球面に続くテキストを歪める簡単な方法はありません。

これは私のために働いたものです。あなたのテキストをより細かく制御を与えること、それを行うための別の方法、

#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 
} 

(それは同じフォルダ内に入っている「drodisans.ttf」ファイルが必要であることに注意してください)、さらにはにテキストを許可します実際に球を「包み込む」のは、イメージをimage_mapとして別のファイルから使用することです。そうすれば、別のプログラム(POVRay自体であっても、Ghostscriptを使ってポストスクリプトスニペットからでも可能です)を使って、ラベルを画像としてあらかじめレンダリングする必要があります。 "image_map" directiveは、イメージファイルを、<,0,0,0>から<,1,1,0>正方形に投影されたUnity squareとして扱い、z軸上で無限に伸びます。しかし、おそらく、ここで必要な2ステップのレンダリングプロセスのために、そこにテキストを配置する際に問題がなければ、別のアプローチをとるべきです。 (私が説明したように、センタリングは「手動で」行わなければならない)。

いずれの方法でも、原点で「オブジェクトを組み立てる」ことが必要であり、その後は変換してスケールする必要があります。

eImage rendered by the script above

関連する問題