rgb(.4,.4,1)
在 Asymptote 中绘制 3D 对象时,可以使用或等结构来定义颜色rgb(1,0,1)+opacity(.5)
,这些结构的含义相当明显。也可以将这些颜色命令包装在 中emissive(..)
,例如emissive(rgb(1,0,1)+opacity(.3))
。
什么是emissive
?我可以看结果,但我不太清楚理解发生了什么事。还有其他类似的包装器吗emissive
?
在手册中,该词emissive
出现的唯一地方是第 132 页的单词emissivepen
。第二个问题是:它emissivepen
做什么?在同一节中,diffusepen
和ambientpen
也specularpen
被定义,尽管我不明白它们的用法。
答案1
在 Asymptote 中,pen
对象包含某些属性(最明显的是颜色),用于绘制线条和填充区域。对象material
(在 中定义three_light.asy
)用于为表面着色,大致包括三种不同的笔。要理解这些,请记住 Asymptote 3d 图片配备了“照明”,其中包括一个或多个光源(指定方向和强度)和环境光(仅强度,没有方向;它“来自任何地方”。)。
diffusepen
:物体与光源的相互作用方式。表面直接对准光源的部分会显示出这种颜色;当表面与光源呈 90 度角时,颜色会逐渐褪色为黑色。specularpen
:物体表现得像镜子的程度。此笔仅影响直接对准光源(或靠近光源)的表面部分。emissivepen
:物体着色完全不受光照影响。emissivepen=red
无论朝哪个方向,只用笔着色的表面都会显示为完全红色。
如果设置了多支笔,则会将颜色加在一起以产生最终结果。
有三种相当方便的方法来生成对象material
(通常用于命令surfacepen
的参数draw
):
完整构造函数:
material(pen diffusepen=black, pen emissivepen=black, pen specularpen=mediumgray, real opacity=opacity(diffusepen), real shininess=defaultshininess, real metallic=defaultmetallic, real fresnel0=defaultfresnel0)
请注意,所有参数都是可选的。
- 对象
pen
可以转换为material
对象。如果你传入 penp
,它将被转换为material(diffusepen=p)
。因此,diffusepen
将是p
,specularpen
将是mediumgray
,而其他两个 pen 不会产生任何影响。 - 包装
emissive
器:如果p
是笔,则emissive(p)
生成一个带有(并从中获取)material
的笔,但没有其他笔参与。如果您想要一个在光照变化时不会褪色为黑色的黄色多边形,那么这很方便。emissivepen=p
opacity
opacity(p)
答案2
据我所知,emissive
钢笔会“发光”。非发光钢笔只会反射光线。用emissive
红色钢笔绘制的 3D 对象将显示为纯红色。用非发光红色钢笔绘制的 3D 对象将显示为红色阴影,具体取决于照明和相机位置。