将 NSDT 场景编辑器 退出你的 3D 开发工具链 https://ted.sinoccdc.cn/?sourceId=9
介绍 色彩是人类与红色、蓝色、黄色、绿色等类别绝对应的视觉感知属性。色彩来源于光的光谱(光功率与波长的散布)在眼睛中与光感受器的光谱灵敏度相互作用。色彩类别和色彩的物理规格也与物体、资料、光源等相关联,基于其物理性质,例如光吸收、反射或发射光谱。通过定义色彩空间,能够通过色彩的坐标以数字形式标识色彩。RGB 色调空间 RGB 色彩模型是一种加法色彩模型,其中红色、绿色和蓝色光以各种形式加在一起以再现各种色彩。模型的名称来自三种加法原色(红色、绿色和蓝色)的首字母缩写。RGB 色彩模型的主要用途是用于在电子系统(如电视和计算机)中感测、示意和显示图像。要应用 RGB 造成色彩,必须叠加三个黑白光束(一个红色、一个绿色和一个蓝色)(例如,通过黑屏发射或白屏反射)。三个光束中的每一个都被称为该色彩的重量,并且它们中的每一个都能够在混合物中具备从齐全敞开到齐全关上的任意强度。RGB 色彩模型是累加的,因为三个光束加在一起,它们的光谱逐波长相加,造成最终色彩的光谱。
添加剂颜色混合:将红色增加到绿色会产生黄色;将所有三种原色相加失去红色 每个重量的零强度示意最暗的色彩(无光,视为彩色),每个重量的全强度示意红色;这种红色的品质取决于主光源的性质,但如果它们适当均衡,后果是中性红色与零碎的白点相匹配。当所有组件的强度雷同时,后果是灰色、较暗或较亮,具体取决于强度。当强度不同时,后果是黑白色调,依据所用原色的最强和最弱强度的差别,或多或少饱和。当其中一种重量具备最强的强度时,该色彩是该原色左近的色调(红色、绿色或蓝色),而当两种重量具备雷同的最强强度时,则该色彩是主要色彩的色调(青色、品红色或黄色的暗影)。第二种色彩是由两种雷同强度的原色之和造成的:青色是绿色 + 蓝色,品红色是红色 + 蓝色,黄色是红色 + 绿色。每种次色都是一种原色的补色;当一种原色和它的互补色加在一起时,后果是红色:青色补充红色,品红色补充绿色,黄色补充蓝色。RGB 色彩模型自身并不定义红色、绿色和蓝色在比色上的含意,因而混合它们的后果不是相对的,而是绝对于原色的。RGBA 色调空间 RGBA 代表 红绿蓝阿尔法。尽管它有时被形容为色彩空间,但它实际上只是应用 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)。定义 通过至多设置三个(RGB)重量和一个可选的 Alpha(A)重量来定义色彩。如果省略 alpha 重量,则默认存储值 1.0 或 0xff。每个色彩组件也能够独立批改或拜访:using namespace chai3d;// reading RGBA componentsGLFloat r = color.getR();GLFloat g = color.getG();GLFloat b = color.getB();GLFloat a = color.getA();// modifying RGBA componentscolor.setR(0.1);color.setG(0.2);color.setB(0.3);color.setA(1.0); 格局转换色彩也能够从一种格局转换为另一种格局:using namespace chai3d;// definitioncColorf colorA;cColorb colorB;// convert color from FLOAT format to BYTE formatcolorA->copyTo(colorB);// convert color from BYTE format to FLOAT formatcolorB->copyTo(colorA); 灰度 灰度色彩能够通过编程所需的亮度值来调配。对于 cColorf 示意模式,值范畴为 0.0(彩色)到 1.0(红色),对于 cColorb 的值范畴为 0 到 255:using namespace chai3d;// set luminance valuecolor->setLuminance(0.8)// get luminance valueGLfloat luminance = color->getLuminance(); 调色板 为了使色彩调配更加直观,CHAI3D 提供了来自 CSS3 标准的预约义色彩列表。调色板色彩以及十六进制和十进制等效项如下图所示。using namespace chai3d;// definitioncColorf color;// assign color by name (royal blue)color.setBlueRoyal();// assign color by name (pure white)color.setWhite();// assign color by name (olive green)color.setGreenOlive();// assign a level of gray. similar to setLuminance() method.color.setGrayLevel(0.5);
CHAI3D 调色板色彩和对象 色彩在整个 CHAI3D 中用于形容图像像素、顶点色彩、材质或照明属性。cColorf 格局通常用于 3D 数据对象(顶点、材质、灯光),而字节示意模式 cColorb 是位图图像和纹理的首选格局。以下是针对场景中的 2D 和 3D 对象调整色彩的几个示例:using namespace chai3d;// get color of image pixel at position (x,y)cColorb color;image->getPixelColor(x, y, color);// set the color of a vertexcColorf color;color.setRed();vertex->setColor(color);// adjust the ambient color component of a light sourcelight->m_ambient.set(0.1, 0.1, 0.1);