当前位置: 首页 > article >正文

92. Color颜色渐变插值

下面给大家介绍一个颜色对象Color颜色渐变插值方法.lerpColors().lerp()

颜色对象Color颜色插值方法.lerpColors()

通过浏览器控制台测试.lerpColors()方法颜色插值的规律。

执行.lerpColors(Color1,Color2, percent)通过一个百分比参数percent,可以控制Color1和Color2两种颜色混合的百分比,Color1对应1-percent,Color2对应percent

const c1 = new THREE.Color(0xff0000); //红色
const c2 = new THREE.Color(0x0000ff); //蓝色
const c = new THREE.Color();

颜色插值结果,和c1一样rgb(1,0,0),100% c1 + 0% c2混合

c.lerpColors(c1,c2, 0);
console.log('颜色插值结果',c);

颜色插值结果rgb(0.5,0,0.5),c1和c2各取50%:

c.lerpColors(c1,c2, 0.5);
console.log('颜色插值结果',c);

和c2一样rgb(0,0,1) 0% c1 + 100% c2混合

c.lerpColors(c1,c2, 1);
console.log('颜色插值结果',c);

颜色对象Color颜色插值方法.lerp()

.lerp().lerpColors()功能一样,只是具体语法细节不同。

c1与c2颜色混合,混合后的rgb值,赋值给c1的.r.g.b属性。

const c1 = new THREE.Color(0xff0000); //红色
const c2 = new THREE.Color(0x0000ff); //蓝色
c1.lerp(c2, percent);

颜色克隆.clone()

通过颜色对象克隆方法.clone()可以返回一个新的颜色对象。

注意c1.clone().lerp()c1.lerp()写法是不同的,执行c1.clone().lerp(),c1和c2颜色混合后,不会改变c1的颜色值,改变的是c1.clone()返回的新颜色对象。

const c1 = new THREE.Color(0xff0000); //红色
const c2 = new THREE.Color(0x0000ff); //蓝色
const c = c1.clone().lerp(c2, percent);//颜色插值计算

Color颜色插值应用

上节课"19.一段曲线颜色渐变"中颜色渐变是自己写的规则,这样比较麻烦,可以借助颜色插值方法Color.lerp()快速实现颜色渐变的计算。

const pos = geometry.attributes.position;
const count = pos.count; //顶点数量
// 计算每个顶点的颜色值
const colorsArr = [];
for (let i = 0; i < count; i++) {
    const percent = i / count; 
    // 红色分量从0到1变化,蓝色分量从1到0变化
    colorsArr.push(percent, 0, 1 - percent); //蓝色到红色渐变色
}
// 根据顶点距离起点远近进行颜色插值计算
const c1 = new THREE.Color(0x00ffff); //曲线起点颜色 青色
const c2 = new THREE.Color(0xffff00); //曲线结束点颜色 黄色
for (let i = 0; i < count; i++) {
    const percent = i / count; //点索引值相对所有点数量的百分比
    //根据顶点位置顺序大小设置颜色渐变
    const c = c1.clone().lerp(c2, percent);//颜色插值计算
    colorsArr.push(c.r, c.g, c.b); 
}

http://www.kler.cn/news/358608.html

相关文章:

  • 【JDK、Maven、Git、PostgreSQL】VSCode后端开发环境配置样例
  • 数值优化 | 图解梯度下降法与共轭梯度下降法(附案例分析与Python实现)
  • 北斗导航系统在智能交通领域的应用
  • 利用TDM在vscode中运行c语言
  • PAI 大语言模型评测平台现已支持裁判员模型评测
  • django连接mysql数据库
  • 堆结构和堆排序
  • 【iOS】YYModel
  • Element UI
  • Web安全实践
  • SQL入门
  • jupyter界面修改成中文教程
  • LabVIEW提高开发效率技巧----离线调试
  • 单片机中的BootLoader(BootLoader简介和写法)
  • Chromium html<lable>c++接口定义
  • SpringBoot 入门
  • 动态规划详解:最长公共子序列问题的高效解法
  • element-plus 官方表格排序问题
  • 【设计模式系列】简单工厂模式
  • 机器学习与神经网络:科技的星辰大海