将文本添加到球体表面

时间:2017-08-28 19:58:21

标签: povray

我正在尝试向球体添加一些文本 - 图形节点上的标签。

例如,在下图中,我希望标记每个节点。

#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:我如何在球体上添加标签。   感谢

1 个答案:

答案 0 :(得分:3)

所以,我做了一些测试,实际上,&#34;对象&#34;颜料图案对你有用。正如我在评论中所写的那样,似乎是你正在绘制你的&#34; Word&#34;在一个地方的颜料对象,并且球体位于其他地方,因此没有交叉点,并且球体仅在&#34;外部&#34;颜色。

我制作了这个样本文件 - 观察我仔细指定我的纹理对象和我的球体在原点(大致在&lt; -1,-1,-1&gt;&lt; 1,1,1&gt; 2之内) -unity立方)。文本对象具有翻译和缩放语句,因此它以&lt; 0,0,0&gt;为中心。 - 据我所知,POVRay没有&#34;文本测量&#34;功能,所以你必须通过&#34;感觉&#34;和&#34;眼睛&#34; - 您获得的唯一测量是字符高度最大为1。如果使用等宽字体,则可以了解每个字符的确切宽度 - 可能会使事情变得更容易。

然后,在创建球体并将文本作为纹理应用时,我将其在Z轴上向上缩放,以确保字母穿过球体表面 - 否则文本会在#34;内部&#34;球体。

正如我在评论中提到的那样,这会产生&#34;扁平&#34;弯曲球体上的文字,并没有简单的方法扭曲球体后面的文字。

所以,这对我有用。 (请注意,它需要&#34; drodisans.ttf&#34;文件位于同一文件夹中)

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

现在,另一种方法是,这样可以让您更好地控制文本,甚至允许文本实际上包裹&#34;球体,是从单独的文件中使用图像作为image_map。这将要求您使用另一个程序将标签预渲染为图像(它甚至可以是POVRay本身,或者您可以使用Ghostscript从postscript代码段执行此操作)。 "image_map" directive将图像文件视为投影在&lt; 0,0,0&gt;上的Unity正方形。至&lt; 1,1,0&gt;正方形,在z轴上无限伸展。但也许,由于这里需要2步渲染过程,你应该坚持使用其他方法,除非你有问题在那里定位文本。 (必须完成定心&#34;手动&#34;,正如我已经解释过的那样。)

请注意,任何一种方法都需要您组装对象&#34;在原点,然后翻译和扩展。

eImage rendered by the script above