2017-08-28 116 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 }} 
} 

我可以添加文字的情节一般,但它是不是在球体表面

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>团结立方)。文本对象具有翻译和缩放语句,以便它集中于< 0,0,0> - POVRay据我所知没有“文本测量”功能,因此您必须通过“感觉”和“眼睛“ - 你得到的唯一测量是角色高度最大为1。如果使用等宽字体,则可以知道每个字符的确切宽度 - 可能会使事情变得更简单。

然后,当创建球体并将文本作为纹理应用时,我将它放在Z轴上,以确保字母穿过球体表面 - 否则文本将位于球体内部。

正如我在评论中提到的,这会在曲面球体上创建“平面”文本,并且没有简单的方法来扭曲球体后面的文本。

所以,这是对我有用。 (请注意,它需要“drodisans.ttf”文件是在同一文件夹)

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

现在,另一种方式来做到这一点,那将让您欣赏到文字更控制,甚至允许文本实际上“环绕”球体,就是从一个单独的文件中将图像用作image_map。这需要你使用另一个程序预先渲染你的标签为图片(它甚至可以是POVRay本身,或者你可以使用Ghostscript从postscript代码片段中完成)。 "image_map" directive将图像文件视为投影在0,0到0,1到1,0>平方的<上的Unity方形,它们在z轴上无限伸展。但是,也许,由于这里需要2步渲染过程,您应该坚持使用其他方法,除非您在此处定位文本时出现问题。 (正如我已经解释的,中心必须“手动”完成)。

请注意,任何一种方法都需要您在原点“组装您的对象”,然后再进行平移和缩放。

eImage rendered by the script above