void Set_Color(const char* color_spec)
渲染一个段的内容时改变使用的颜色。还可以用于选择要在高亮模式中使用的曲面特性,以及用于特殊纹理贴图效果。
具体细节
Set_Color()的通用目标是使用这个颜色进行绘制。你可以之只给颜色命令,也可以具体描述颜色应用的具体几何体类型。在HOOPS高亮模式,Set_Color()允许你描述照明表面的反射性reflection、透射性transmission(材质属性)。此外,你可以制定像颜色一样使用的图片和纹理的名称。
color_spec的颜色部分以描述的形式出现,例如 “pinkish sunset-orange” or “pale gray” or “R=0.8 G=0 B=0.1”.。
HOOPS支持的颜色列表:
定义组合规则的形式语法
不区分大小写
color -> qual-list hsimple
qual-list -> qual-list 1st-degree
-> qual-list 2nd-degree
-> optspace
1st-degree -> 1st-name
-> primitive `ish'
2nd-degree -> 2nd-name
-> primitive `er'
hsimple -> simple `-' simple
-> simple
simple -> defined-name
-> primitive
primitive -> lparen `R' val `G' val `B' val rparen
-> lparen `H' val `S' val /I>`V' val rparen
-> lparen `H' val `L' val `S' val rparen
-> lparen color rparen
val -> optspace `=' optspace float-num optspace
1st-name -> defined-name
2nd-name -> defined-name
defined-name -> optspace trim-name optspace
trim-name -> letter trim-name
-> letter
float-num -> optpm digits optfrac optexp
optpm -> `+'
-> `-'
-> <nothing>
digits -> `0..9' optdigits
optdigits -> `0..9' optdigits
-> <nothing>
optfrac -> `.' optdigits
-> <nothing>
optexp -> `E' optpm digits
-> <nothing>
letter -> `A..Za..z0..9'
-> `'(2)
-> `#'
-> `-'
-> `$'
-> `_'
-> `%'
-> `/'
lparen -> `(' optspace
rparen -> `)' optspace
optspace -> `' optspace
-> `<tab>' optspace
-> <nothing>
如何定义颜色
如果只在color_spec中命名一种颜色,则所有不同类型的几何体都将使用该颜色(窗口颜色和对比度颜色不受影响)。
如果希望更具体,color_spec也可以是一个字符串,由要着色的几何体类型、等号和要使用的颜色组成。例如:“lines=red”。单词周围可以插入空格。通过嵌入逗号,可以在给定的color_spec中创建多个规范,如下例所示:
Set_Color("lines = red, edges = green")
相同的颜色可以折叠在一起:
Set_Color("lines=edges=green, faces=markers=blue")
可以在以下各项上设置颜色:
ambient light
faces
多边形、壳、网格、椭圆和圆(曲面)的内部填充区域。与其他类型的几何体不同,面除了主颜色之外还具有其他特性。
lines
与“polylines”同义。
polylines
适用于直线、多段线和墨迹线。
markers
适用于标记符号
特殊表面颜色选项
通常只需要一种颜色来描述几何体(例如,“lines=red”),但是,面可以有更复杂的定义。这些更复杂的设置可用于启用以下功能:
- Transparency(a.k.a transmission)
Transparency(a.k.a transmission)
支持透明度的设备通常要求延迟透明对象,以便可以按深度对其进行排序。因此,使曲面透明通常会减慢渲染过程。Set_Rendering_options()中提供了几个不同的透明度隐藏曲面移除算法选项(查找“透明度”子选项)。这些不同的策略控制透明几何体的速度和质量之间的权衡。
Set_Color("Faces=(transmission=black)")
描述了完全不透明的表面
Set_Color("faces=(transmission=white)")
描述了一种完全透明的材料
Set_Color("faces=(transmission=green)")
描述了对红色和蓝色不透明但对绿色透明的曲面。
非灰度值(即r=g=b)的传输设置往往与现代图形硬件的映射较差,因此可能会产生比正常性能更大的性能损失。
表面透明度的精度取决于硬件和所使用的隐藏表面移除类型。一些显示设备具有加速绘制透明表面的硬件,但只允许一定程度的透明度而不是颜色(在这种情况下,使用颜色的强度,但忽略色调和饱和度)。
并非所有设备或隐藏表面算法都能够支持传输。否则,透明几何体将呈现为不透明。
在特殊情况下,您可能希望以数字方式(有关详细信息,请参阅set_Color_By_Value())或间接方式(请参阅set_Clor_By_Index())设置颜色。如果您的程序正在计算颜色参数,则“按值”设置颜色可能是合适的。“按索引”设置颜色允许间接控制颜色使用,并与HOOPS“图像”约定兼容。将颜色作为参数的特殊面部颜色(即除光泽外的所有颜色)也可以通过显式浮点值的值设置。
Set_Color("faces = (transmission = (r=0.2 g=0.2 b=0.2))")
如果您正在从HOOPS多边形、壳或网格构建三维图形,并且不使用灯光,则需要确保“边”可见,否则您将只看到图形的轮廓。要区分边,您需要绘制有图案的面,或者选择与“面”颜色不同的“边”颜色。