【超图】SuperMap iClient3D for WebGL/WebGPU ——颜色(1)

作者:taco

        在项目中通常会出现,高亮对象。给对象设置颜色的一些问题。那么针对颜色设置在超图的 iClient3D for WebGl/WebGPU 中又提供了哪些方式呢?本篇文章将介绍一些颜色的设置方法。以及一些颜色的参数设置。


        在iClient3D for WebGl/WebGPU 中主要以SuperMap3D.Color来配置颜色。

        1.颜色模块

        在Color的方法中提供了一些默认的颜色模块,可以直接使用。这里整理了所有可直接设置的颜色供大家参考。

 这里可以直接调用上述颜色来使用

var color = SuperMap3D.Color.AQUA;

 

        2.Color(red,green,blue,alpha)

        当然上面哪些单词对于一个英语好的人,或者是外国人可能能记住。但是身为一个搞代码的,怎么可能记住那么多颜色。那么就需要通过别的方式来修改颜色了。我们通过new SuperMap3D.Color()方式可以直接创建颜色。在Color中的参数分别为red,green,blue,alpha而取值范围分别都在0-1的区间内

        

        我们定义一个polygon 来赋予其颜色,当我们new一个颜色值并不设置参数时,颜色显示为白色。

			var color = new SuperMap3D.Color()//自定义polygonvar polygon = viewer.entities.add({polygon: {hierarchy: {positions: [new SuperMap3D.Cartesian3(290254.5148736448, 5637924.074937166,2971777.4768239637),new SuperMap3D.Cartesian3(286432.14053509803, 5640804.651089405, 2966391.9275969476),new SuperMap3D.Cartesian3(283512.2666752818, 5640502.494127799, 2969385.3689191523),new SuperMap3D.Cartesian3(287036.36797237827, 5636827.146248645, 2974105.8904601005)]},material: color,}});viewer.zoomTo(polygon);

        这里如果不设置alpha值的话也是可以的。透明度会给与默认值1。 

var color = new SuperMap3D.Color(1,0,0)

         当我们的数值越趋近于0的话,这个色段的颜色会越深,越趋近于1时则越明亮。

var color = new SuperMap3D.Color(0.3,0,0)

         Alpha的取值范围也在0-1之内,可以通过调整alpha值直接修改其透明度。

var color = new SuperMap3D.Color(1,0,0,0.5)

         取值范围如果超过1的话颜色均会变为黑色。

var color = new SuperMap3D.Color(2,0,0)

3.Color的一些其他方法

        3.1 数值运算

         3.1.1 add(left, right, result) 融合颜色

        该方法可以返回两种颜色的融合色,相当于将rgba四个分量值分别累加起来,得到最后的值。不过有一点要注意alpha值也会叠加的。

			    var red = new SuperMap3D.Color(1,0,0,0.5);var blue = new SuperMap3D.Color(0,0,1,0.5);var result = new SuperMap3D.Color();SuperMap3D.Color.add(red,blue,result)console.log("red",red,"blue",blue,"result",result);

 

     3.1.2 subtract(left, right, result) 两颜色分量差值运算

        该方法可以将两个颜色的各分量进行差值运算。

				var a = new SuperMap3D.Color(1, 7, 1, 1);var b = new SuperMap3D.Color(0.3, 10, 0, 0.5);var result = new SuperMap3D.Color();SuperMap3D.Color.subtract(a, b, result)console.log("a", a, "b", b, "result", result);

        

   3.1.3 mod(left, right, result) 余数运算

        可以算出两个颜色之间的余数。很难想象会用颜色值做类似运算。

			    var a = new SuperMap3D.Color(1,7,1,1);var b = new SuperMap3D.Color(0.3,10,0,0.5);	var result = new SuperMap3D.Color();SuperMap3D.Color.mod(a, b, result) console.log("a",a,"b",b,"result",result);

 

       3.1.4 multiply(left, right, result) 两颜色分量乘积运算

        可以计算两个颜色中各个分量的乘积,并返回新颜色        

				var a = new SuperMap3D.Color(1, 7, 1, 1);var b = new SuperMap3D.Color(0.3, 10, 0, 0.5);var result = new SuperMap3D.Color();SuperMap3D.Color.multiply(a, b, result)console.log("a", a, "b", b, "result", result);

        3.1.5 multiplyByScalar(color, scalar, result)  单颜色指定乘积运算

        可以指定数值与颜色各分量进行乘积运算,返回新颜色。

				var a = new SuperMap3D.Color(1, 7, 1, 1);var result = new SuperMap3D.Color();var scalar = 10;SuperMap3D.Color.multiplyByScalar(a, scalar, result)console.log("a", a, "scalar", scalar, "result", result);

         3.1.6 divide(left, right, result) 两种颜色求商

        该方法用于计算每个分量的商,相当于rgba每个值去求商。

				var a = new SuperMap3D.Color(1,1,1,1);var b = new SuperMap3D.Color(1,0,1,0.5);	var result = new SuperMap3D.Color();SuperMap3D.Color.divide(a, b, result)console.log("a",a,"b",b,"result",result);

         3.1.7 divideByScalar(color, scalar, result) 单颜色求商

        改方法用于将指定颜色的每个分量除以scalar值,来得到一个新的颜色。

				var red = new SuperMap3D.Color(1,0,0,1);var scalar = 2;var result = new SuperMap3D.Color();SuperMap3D.Color.divideByScalar(red, scalar, result)console.log("red",red,"result",result);

        3.2 类型转换

        3.2.1 颜色返回指定类型的值

       下述方法 toBytes、toCssColorString、toRgba、toString 可以将颜色返回指定类型的数值.

				var red = new SuperMap3D.Color(0.8, 0, 0, 1);var bytesResult = red.toBytes();var CssColorResult = red.toCssColorString();var RgbaResult = red.toRgba();var StringResult = red.toString();

        3.2.2 byteToFloat(number) Byte转换Float

        该方法用来将0-255区间的Byte值转换到0-1Float值。感觉作用并不大,因为color设置也可以使用byte值来进行。具体的用途目前还没有发现。后续发现在进行补充。

                var byteNumber = 255;var floatNumber = SuperMap3D.Color.byteToFloat(byteNumber)console.log("byteNumber",byteNumber,"floatNumber",floatNumber);

         3.2.3 floatToByte(floatNumber) Float转换Byte

        用于将Float值转换为Byte值,与byteToFloat使用方法相同,用于数值转换。

                var floatNumber = 1var byteNumber = SuperMap3D.Color.floatToByte(floatNumber)console.log("floatNumber",floatNumber,"byteNumber",byteNumber)

        

         3.2.4 fromBytes(red, green, blue, alpha, result) Bytes创建颜色

         该方法可以创建使用0到255范围内的红色、绿色、蓝色和alpha值指定的新颜色,并在内部将其转换为0.0到1.0范围。好消息,我们终于可以用255创建颜色啦!不过注意一点alpha的值域也是在0-255之间哦。

				var result = new SuperMap3D.Color();		SuperMap3D.Color.fromBytes(255, 0, 0, 50, result) 

        

        3.2.5 fromCartesian4(cartesian, result) Cartesian4创建颜色

        从Cartesian4创建一个Color实例。x、 y、z和w分别映射到红色、绿色、蓝色和alpha。

				var cartesian =  new SuperMap3D.Cartesian4(1,0,0,0.1)var result = new SuperMap3D.Color();SuperMap3D.Color.fromCartesian4(cartesian, result)// x=>red// y=>green // z=>blue // w=>alpha 

         3.2.6 fromCssColorString(color, result) 使用CSS颜色样式设置颜色(常用)

        该方法可以从CSS颜色值创建Color实例。 CSS的样式支持#rgb, #rrggbb, rgb(), rgba(), hsl(), hsla() 。

//#rgb
var result1 = SuperMap3D.Color.fromCssColorString('#f00');
//#rrggbb					
var result2 = SuperMap3D.Color.fromCssColorString('#67ADDF');
//color				
var result3 = SuperMap3D.Color.fromCssColorString('green');
//rgb()				
var result4 = SuperMap3D.Color.fromCssColorString('rgb(255,0,0)');
//rgba()  	
var result5 = SuperMap3D.Color.fromCssColorString('rgb(255,0,0,0.5)');
//hsl()	
var result6 = SuperMap3D.Color.fromCssColorString('hsl(0,100%,50%)');
//hsla()  	
var result7 = SuperMap3D.Color.fromCssColorString('hsla(0,100%,50%,1)'); 
        3.2.7 fromHsl(hue, saturation, lightness, alpha, result)  使用HSL设置颜色

        该方法可以根据色调、饱和度、亮度来创建颜色。同时支持设置透明度。取值区间在0-1之间。CSS Color Module Level 3

				var result = SuperMap3D.Color.fromHsl(0,1,0.5,1);console.log(result)

          3.2.8 fromRgba(rgba, result) 使用rgba创建颜色

        使用系统的端序,从单个数字无符号32位RGBA值创建新的“颜色”。

var color = SuperMap3D.Color.fromRgba(0x67ADDFFF);

       

 

        3.3 其他方法

        3.3.1 clone(color, result) 复制颜色

        该方法用于复制一个颜色。

                var red = new SuperMap3D.Color(1,0,0,0.5);var result = new SuperMap3D.Color();SuperMap3D.Color.clone(red, result) console.log(red,result);//下面方法效果相同var newred = red.clone();

        3.3.2 equals(left, right) 判断颜色是否相同 

        该方法用来判断两个颜色是否为同一个颜色。

				var red1 = new SuperMap3D.Color(1,0,0,1);var red2 = new SuperMap3D.Color(1,0,0,1);var blue = new SuperMap3D.Color(0,0,1,1);var e1 = SuperMap3D.Color.equals(red1,red2)var e2 = SuperMap3D.Color.equals(red1,blue)console.log("e1",e1,"e2",e2);//或直接使用下面方法效果一样red1.equals(red2)

 

        3.3.3 fromAlpha(color, alpha, result) 指定alpha值  &withAlpha(alpha)

        该方法创建一个新的“颜色”,该颜色具有与指定颜色相同的红色、绿色和蓝色,但具有指定的alpha值。

				var red = new SuperMap3D.Color(1,0,0,1);var alpha = 0.5;var result = new SuperMap3D.Color();SuperMap3D.Color.fromAlpha(red, alpha, result);console.log("red",red,"result",result);//withAlphavar red = new SuperMap3D.Color(0.8, 0, 0, 1);var newred = red.withAlpha(0.5)

      3.3.4 fromRandom(options, result) 随机颜色

        可以创建随机颜色,也可以通过固定颜色值或颜色区间创建随机颜色。

				var result = SuperMap3D.Color.fromRandom();var result2 = SuperMap3D.Color.fromRandom({red : 1.0,green : 1.0,alpha : 1.0});		var result3 = SuperMap3D.Color.fromRandom({// red:1.0, 		//红// green:1.0,		//绿// blue:1.0,		//蓝// alpha : 1.0,		//透明度minimumRed : 0.25,	//最小红色取值maximumRed:0.75,	//最大红色取值minimumGreen : 0.25,	//最小绿色取值maximumGreen:0.75,		//最大绿色取值minimumBlue : 0.25,		//最小蓝色取值maximumBlue:0.75,		//最大蓝色取值minimumAlpha:0.25,		//最小透明度取值maximumAlpha:0.75, 		//最大透明度取值});	

       

   
        3.3.5 pack(value, array, startingIndex) 将颜色值存入数组指定位置

        该方法可以将颜色的各分量存入数组的指定位置。

				var red = new SuperMap3D.Color(1,0,0,1);var array = [1,2,3];SuperMap3D.Color.pack(red, array, 1)console.log("array",array);

 

        3.3.6 unpack(array, startingIndex, result) 从数组指定位置获取颜色值

        该方法可以从数组中的指定位置(startingIndex)获取所需要的颜色值

				var array = [1, 0, 0, 1, 1, 1, 1, 0, 1];var result = new SuperMap3D.Color();SuperMap3D.Color.unpack(array, 1, result)console.log("result", result);

 

        3.3.7 brighten & darken 变量&变暗

        该方法可以是颜色变亮&变暗

				var red = new SuperMap3D.Color(0.8,0,0,1);//变亮	var brightred = red.brighten(0.5, new SuperMap3D.Color());	//变暗			var darkred = red.darken(0.5, new SuperMap3D.Color());

 

         关于颜色的基本运算与设置本篇文章介绍完成。关于更多的颜色使用方法可以参考下一篇文章SuperMap iClient3D for WebGL/WebGPU ——颜色(2)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/286251.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java 8 中的 Stream:优雅的集合处理

Java 8 中的 Stream:优雅的集合处理 为什么需要 Stream?Stream 的特性Stream 基本操作1. 创建 Stream2. 中间操作2.1 过滤(Filter)2.2 映射(Map)2.3 截断(Limit) 3. 终端操作3.1 遍历…

干货教学!!!RHEL8中ansible中常用模块的使用

内容很长各位大老爷耐心观看 本章主要介绍ansible中最常见模块的使用 文件管理模块软件包管理模块服务管理模块磁盘管理模块用户管理模块防火墙管理模块 ansible的基本用法如下 ansible 机器名 -m 模块x -a “模块的参数” 对被管理机器执行不同的操作,只需要调…

【Image】图像处理

计算机视觉 CV Perception 如自动驾驶领域。 只要是从所谓的图像当中去抽取信息的过程,我们都叫做Perception。 视觉检测可以涵盖二维检测,如车辆、人和信号灯的检测。另外,还可以控制三维信息,直接在三维空间中操作数据。 SL…

内网BUG管理系统本地部署并结合内网穿透实现异地远程访问

文章目录 前言1. 本地安装配置BUG管理系统2. 内网穿透2.1 安装cpolar内网穿透2.2 创建隧道映射本地服务3. 测试公网远程访问4. 配置固定二级子域名4.1 保留一个二级子域名5.1 配置二级子域名6. 使用固定二级子域名远程 前言 BUG管理软件,作为软件测试工程师的必备工具之一。在…

Gartner发布2024 年技术提供商热门趋势:人工智能安全

GenAI 的采用有望带来商业收益,但也敲响了对其可能造成的危害的警报。产品领导者需要在透明度和安全性方面进行投资,以应对不断关注人工智能安全的监管和市场力量。 机会 随着人工智能产品在企业解决方案中的激增,负责任和安全的人工智能将越…

JVM虚拟机系统性学习-JVM调优实战之内存溢出、高并发场景调优

调优实战-内存溢出的定位与分析 首先&#xff0c;对于以下代码如果造成内存溢出该如何进行定位呢&#xff1f;通过 jmap 与 MAT 工具进行定位分析 代码如下&#xff1a; public class TestJvmOutOfMemory {public static void main(String[] args) {List<Object> list…

【Proteus仿真】【Arduino单片机】定时智能插座开关

文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用Proteus8仿真Arduino单片机控制器&#xff0c;使LCD1602液晶&#xff0c;DS18B20温度传感器、按键、蜂鸣器、继电器开关、HC05蓝牙模块等。 主要功能&#xff1a; 系统运行后&#xff0c;LCD16…

SQL进阶理论篇(十二):InnoDB中的MVCC是如何实现的?

文章目录 简介事务版本号行记录的隐藏列Undo LogRead View的工作流程总结参考文献 简介 在不同的DBMS里&#xff0c;MVCC的实现机制是不同的。本节我们会以InnoDB举例&#xff0c;讲解InnoDB里MVCC的实现机制。 我们需要掌握这么几个概念&#xff1a; 事务版本号行记录的隐藏…

unittest自动化测试断言方法的介绍

断言如同在测试用例上&#xff0c;类似于预期结果与实际结果是否一致&#xff0c;如果一致则表示测试通过&#xff0c;Assert断言很好的用于测试结果判断上,更灵活的对预期结果和实际结果进行对比&#xff0c;下面简单的介绍一下unittest的Assert断言 unittest中基础的assert断…

使用Windows批处理命令行和ImageMagick批量将文件夹中的图片转换为PDF文档的方法

目录 应用场景 实现思路 实现过程 1.下载安装imageMagick 2.遍历源文件夹 3.转换图片为pdf文档 4.最终执行的命令 5.结果验证 6.将以上命令改写为windows批处理文件 应用场景 图像是一种常见的数据。图片几乎是一个信息系统中必不可少的组成部分。为了方便阅读&…

机器学习ST股票预测模型(企业建模_论文建模定制服务_信用评分卡等多算法实现)

知己知彼&#xff0c;百战不殆&#xff1b;不知彼而知己&#xff0c;一胜一负&#xff1b;不知彼&#xff0c;不知己&#xff0c;每战必贻。--《孙子兵法》谋攻篇 ST股票 ST股票是指因连续两年净利润为负而被暂停上市的股票&#xff0c;其风险较高&#xff0c;投资者需要谨慎…

Web自动化框架中验证码识别处理全攻略,让测试更得心应手!

前言&#xff1a; 随着Web应用程序的不断发展&#xff0c;自动化测试已成为项目开发中必不可少的一环。然而&#xff0c;验证码的出现却经常会使自动化测试变得更具挑战性。为了解决这个问题&#xff0c;我们需要一种方法来自动识别和处理验证码&#xff0c;从而提高自动化测试…