将NSDT场景编辑器加入你的3D开发工具链https://ted.sinoccdc.cn/?sourceId=9简介颜色对应红、蓝、黄、绿等视觉感知的类别属性。颜色源自光谱(光功率与波长的分布)与眼睛中光感受器的光谱灵敏度相互作用。颜色的类别和物理规格也根据物体、材料、光源等的物理特性,如光吸收、反射或发射光谱,与物体、材料、光源等相关联。通过定义颜色空间,颜色可以通过其坐标以数字方式标识。RGB色彩空间RGB色彩模型是一种加法色彩模型,其中红、绿、蓝光以各种方式相加在一起,以再现各种颜色。该模型的名称来自三种加法原色(红色、绿色和蓝色)的首字母缩写词。RGB颜色模型的主要用途是在电视和计算机等电子系统中感测、表示和显示图像。要使用RGB形成颜色,必须叠加三种彩色光束(一红、一绿和一蓝)(例如,由黑屏发射或由白屏反射)。三束光中的每一束都被称为该颜色的一个组成部分,它们中的每一束都可以在混合物中具有任何强度,从完全关闭到完全打开。RGB颜色模型是相加的,因为三束光相加在一起,它们的光谱逐波长相加,形成最终颜色的光谱。加法混色:将红色加到绿色会产生黄色;将所有三个原色相加得到白色每个分量的零强度代表最暗的颜色(没有光,被认为是黑色),每个分量的全强度代表白色;这种白色的质量取决于主光源的性质,但如果它们适当平衡,结果是与系统白点相匹配的中性白色。当所有成分都具有相同的强度时,结果会变灰、变深或变浅,具体取决于强度。当强度变化时,结果是一种彩色色调,根据所用原色的最强和最弱强度的差异或多或少地饱和。当其中一种成分具有最强强度时,颜色是接近该原色的色调(红色、绿色或蓝色),当两种成分具有相同的最强强度时,该颜色是次要颜色色调(青色,品红色或黄色)。第二种颜色由两种强度相同的原色相加而成:青色是绿色+蓝色,品红色是红色+蓝色,黄色是红色+绿色。每一种二次色都是一种原色的补色;当原色和它的补色加在一起时,结果是白色:青色补红色,洋红色补绿色,黄色补蓝色。RGB颜色模型本身并没有定义红色、绿色和蓝色在比色学上的含义,因此混合它们的结果不是绝对的,而是相对于原色的。RGBA颜色空间RGBA代表红绿蓝Alpha。尽管有时将其描述为颜色空间,但它实际上只是使用RGB颜色模型并提供附加信息。颜色为RGB,可能属于任何RGB颜色空间,但整数alpha值启用alpha合成。Alpha通道通常用作不透明通道。如果一个像素在其alpha通道中的值为0%,则它是完全透明的(因此不可见),而其alpha通道中的值为100%表示一个完全不透明的像素(传统数字图像)。0%到100%之间的值允许像素透过玻璃(半透明)等背景显示,这对于简单的二进制(透明或不透明)透明度是不可能的。PNG是一种使用RGBA的图像格式。RGBA颜色的光谱CHAI3D中的颜色CHAI3D提供了两种不同的数据结构来使用RGBA定义来表示颜色。这些结构被定义为cColorb和cColorf,它们都将四个颜色分量RGBA存储在一个名为m_color[4]的四单元格数组中。两种格式之间的唯一区别是它们的数字表示:cColorb使用一个字节表示每个颜色分量(0x00-0xff),而cColorf使用浮点数(0.0-1.0)。Define通过设置至少三个(RGB)分量和一个可选的Alpha(A)分量来定义颜色。如果省略alpha分量,则默认存储值1.0或0xff。每个颜色分量也可以独立修改或访问:usingnamespacechai3d;//readingRGBAcomponentsGLFloatr=color.getR();GLFloatg=color.getG();GLFloatb=color.getB();GLFloata=color.getA();//修改RGBA分量color.setR(0.1);color.setG(0.2);color.setB(0.3);color.setA(1.0);格式转换颜色也可以从一种格式转换为另一种格式两种格式:usingnamespacechai3d;//definitioncColorfcolorA;cColorbcolorB;//将颜色从FLOAT格式转换为BYTEformatcolorA->copyTo(colorB);//从BYTE转换颜色格式为FLOATformatcolorB->copyTo(colorA);grayIntensity可以通过编程指定所需的亮度值来分配灰度颜色。cColorf表示取值范围为0.0(黑色)到1.0(白色),cColorb表示为0到255:usingnamespacechai3d;//设置亮度值color->setLuminance(0.8)//获取亮度值GLfloatluminance=color->得到亮度();调色板为了使颜色分配更直观,CHAI3D提供了一个来自CSS3规范的预定义颜色列表。调色板颜色及其对应的十六进制和十进制值如下图所示。usingnamespacechai3d;//definitioncColorfcolor;//按名称分配颜色(宝蓝色)color.setBlueRoyal();//按名称分配颜色(纯白色)color.setWhite();//按名称分配颜色(橄榄绿))color.setGreenOlive();//指定灰度等级。类似于setLuminance()方法.color.setGrayLevel(0.5);CHAI3D调色板颜色和对象颜色用于描述图像像素、顶点颜色、材质或光照属性。cColorf格式通常用于3D数据对象(顶点、材质、灯光),而字节表示cColorb是位图图像和纹理的首选格式。以下是调整场景中2D和3D对象颜色的几个示例:usingnamespacechai3d;//获取位置(x,y)处图像像素的颜色//设置一个顶点的颜色cColorfcolor;color.setRed();vertex->setColor(color);//调整一个光源的环境颜色分量light->m_ambient.set(0.1,0.1,0.1);
