我正在尝试向球体添加一些文本 - 图形节点上的标签。
例如,在下图中,我希望标记每个节点。
#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 :(得分: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;在原点,然后翻译和扩展。