Asymptote 中的“发射”起什么作用?

Asymptote 中的“发射”起什么作用?

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做什么?在同一节中,diffusepenambientpenspecularpen被定义,尽管我不明白它们的用法。

答案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对象。如果你传入 pen p,它将被转换为material(diffusepen=p)。因此,diffusepen将是pspecularpen将是mediumgray,而其他两个 pen 不会产生任何影响。
  • 包装emissive器:如果p是笔,则emissive(p)生成一个带有(并从中获取)material的笔,但没有其他笔参与。如果您想要一个在光照变化时不会褪色为黑色的黄色多边形,那么这很方便。emissivepen=popacityopacity(p)

答案2

据我所知,emissive钢笔会“发光”。非发光钢笔只会反射光线。用emissive红色钢笔绘制的 3D 对象将显示为纯红色。用非发光红色钢笔绘制的 3D 对象将显示为红色阴影,具体取决于照明和相机位置。

相关内容