如何实现TWaver 3D颜色渐变

一般而言,需要实现3D物体的渐变,通常的思路就是通过2D绘制一张渐变canvas图片作为3D对象的贴图,这种方式是可以解决这类问题的,不过对于一般用户而言,通过2D生成一张渐变的图片,有一定的难度,另外如果要生成的图片比较多,性能效率上会成为一个瓶颈,特别是渐变随着条件在不断变化的情况下,就需要每次绘制的时候都去生成一张渐变的canvas图,效率极其低。

 

在3D中,另外一种通常的方式就是通过顶点色来实现渐变,然而这种方式对于用户的难度更大,因为需要用户了解3D底层的一些原理,同时需要对于每个物体的顶点结构有深入了解;尽管如此难,这种方式由于受到了顶点数量的限制,其渐变的颜色数量也受到了限制,这是不能接受的一个问题。

由此看来,3D对象实现任意渐变有一定难度。不过,有一个好消息是,对于使用TWaver 3D的用户而言,TWaver 3D从底层封装了一些常用的渐变,用户只需要调用简单的接口,就可以实现3D物体的色彩缤纷。
如果通过TWaver 3D实现渐变,通过一个简单的例子,就可以看出来效果:

1 var box, node;
2          function load() {
3 
4              box = new mono.DataBox();
5              var camera = new mono.PerspectiveCamera(30, 1.5, 0.1, 10000);
6              camera.setPosition(0, 200, 500);
7 
8              var network = new mono.Network3D(box, camera, myCanvas);
9              var interaction = new mono.DefaultInteraction(network);
10              interaction.zoomSpeed = 10;
11              network.setInteractions([new mono.SelectionInteraction(network), interaction]);
12              mono.Utils.autoAdjustNetworkBounds(network, document.documentElement, 'clientWidth', 'clientHeight', 0, 30);
13 
14              var pointLight = new mono.PointLight(0xFFFFFF, 1);
15              pointLight.setPosition(10000, 10000, 10000);
16              box.add(pointLight);
17              box.add(new mono.AmbientLight(0x888888));
18              createGradientNode();
19          }
20 
21          function createGradientNode(i) {
22              var node = new mono.Cylinder(30, 30, 60,100);
23              node.setStyle('m.color', 'orange');
24              node.setStyle('side.m.gradient', {
25                  0 : 'red',
26                  1 : 'orange'
27              });
28              node.setStyle('top.m.gradient', {
29                  0 : 'yellow',
30                  1 : 'orange'
31              });
32              node.setStyle('bottom.m.gradient', {
33                  0 : 'yellow',
34                  1 : 'red'
35              });
36              node.setStyle('side.m.gradientType', 2);
37              node.setStyle('top.m.gradientType', 5);
38              node.setStyle('bottom.m.gradientType', 5);
39              box.add(node);
40          }
41 
42          function randomSeverity() {
43              var severities = mono.AlarmSeverity.severities;
44              return severities.get(randomInt(severities.size()));
45          };
46 
47          function randomInt(n) {
48              return Math.floor(Math.random() * n);
49          };

其中设置节点渐变的代码如下,其中对圆柱体的top,side,bottom 3个面都设置了渐变,top,bottom设置了radial 渐变,side设置了linear渐变:

1 node.setStyle('side.m.gradient', {
2                     0 : 'red',
3                     1 : 'orange'
4                 });
5                 node.setStyle('top.m.gradient', {
6                     0 : 'yellow',
7                     1 : 'orange'
8                 });
9                 node.setStyle('bottom.m.gradient', {
10                     0 : 'yellow',
11                     1 : 'red'
12                 });
13                 node.setStyle('side.m.gradientType', 2);
14                 node.setStyle('top.m.gradientType', 5);
15                 node.setStyle('bottom.m.gradientType', 5);

最终的效果如下:

可以看出,使用TWaver 3D,只需要很少的代码,就能实现效果比较炫的渐变效果。
如果你对于底层的实现比较感兴趣,在此也可以顺便提一下,其实底层的实现是GPU通过物体的UV坐标来实现的渐变,以linear-v渐变方式为例,如果你设置了0的位置是color1 ‘red’,1 的位置是 color2 ‘orange’,那么在任何一个点A上,假定其UV坐标为u,v,其颜色就可以在GPU里面计算得到:

1finalColor = (v - 0) * color2 + (1 - v) * color1;
基于TWaver实现的3D机房Demo TWaver是基于WebGL3D一个框架,可以使用其框架进行web3d的开发,这里贴上官方的一个小案例,可以参照使用。 立即下载

相关推荐

java代码-使用java制作有渐变颜色的代码雨的源代码

java代码-使用java制作有渐变颜色的代码雨的源代码 ——学习参考资料:仅用于个人学习使用!

TWaver图形界面之道(五)Hello TWaver

继续上一章的介绍TWaver图形界面之道(四)如何申请与技术支持 本章将以一个入门示例开始,介绍TWaver的基本使用,设计思想以及开发流程,如果你已经熟悉了TWaver的使用,熟悉了TWaver的MVC的设计模式,可跳过本章节。 Hello TWaver 以一个经典示例开始,创建两个节点和一条连线,并在不同组件中展现,然后我们会追加告警,观察界面的变化。 开发环境 ...

web开发自学 501

软考高级,信息系统项目管理师(高项)经验分享

软考高级,信息系统项目管理师(高项)经验分享 2020-12-21信息系统项目管理师(俗称高项)成绩出来了54,55,47,终于成为高级工程师了。 本文以编写整体管理论文的格式进行,将分为项目启动、项目计划、项目执行、项目检查、项目收尾5个过程回顾高项的考试历程,希望对其他同学有借鉴意义。个人觉得可能对于一次考不过的人参考价值比较大。 第一阶段、项目启动阶段Start——决定考哪个科目。 如图,高级资格的类型有:信息系统项目管理师、系统分析师、系统架构设计师、......

zcheva的专栏 5万+

用TWaver HTML5定制五彩斑斓的链路

最近有客户提到自定义链路的需求,个人感觉非常有代表意义,现在共享出来给大家参考一下。先来看看需求: 链路要分成两半,用两种颜色填充。 填充百分比在不同值域时,用不同颜色。 显示刻度 有个开关,可以控制链路变短,变短后,链路只画开始和结束部分(相当于原始链路的缩影),中间不画 如果有多条链路,链路合并后两端分别显示这些链路中的最高填充百分比 合并前: 合并后: 进入子网后...

web开发自学 483

动力锂电池-二阶RC模型等效电路-RLS参数辨识-Simulink

1.锂电池二阶RC等效电路模型

QQ1978009424的博客 1万+

Token算力工厂建设方案:从GPU集群到计量计费的全链路设计

在AI应用从“租核”走向“买Token”的范式转换中,算力交付的核心指标已不再是vCPU或GPU实例,而是单位时间内的Token产出量与单Token成本。这一变化推动基础设施从资源租赁向计件生产演进,要求GPU集群、推理引擎、调度系统、计量计费等模块像工厂产线一样协同运转。本文从硬件异构混部、存储网络设计、推理引擎调优、Token网关与配额管理、稳定性治理等维度,系统拆解如何构建一座可量化、可计费、可扩展的Token算力工厂,并给出分三期落地的推进节奏,帮助架构师与技术管理者在AI基础设施建设中实现成本可控

weixin_29095587的博客 262

【Echarts】三维地图叠加柱状图

代码如下所示: <!DOCTYPE html> <html lang="en"> <head> <meta http-equiv="Content-Type" content="text/html; charset=GBK" /> <title>echarts 地图</title> <script src="https://cdn.staticfile.org/jquery/1.10.2/jquer..

心生的小鱼专栏 1597

[pytorch] MedicalNet 3D Resnet预训练模型迁移学习实战:从分割到分类的代码改造

本文详细介绍了如何利用PyTorch对MedicalNet 3D ResNet预训练模型进行迁移学习,从分割任务改造为分类任务。通过解析模型结构、调整分类头、加载预训练权重及优化训练策略,帮助开发者在医疗影像领域快速实现高效模型部署。文章还涵盖了数据预处理、增强技巧及模型轻量化等实用内容。

kmeans3miner的博客 245

记录下echarts Map3D地图渐变

记录下echarts Map3D地图渐变

qq_41667885的博客 4088

利用ADS设计射频功率放大器

利用ADS设计射频功率放大器 任务: 用飞思卡尔公司的功率放大器芯片ATF27s006NT1设计射频功放,芯片频率范围可达450MHz-3.6GHz。 功放指标: (1) 工作频率:500MHz (2) 增益:G>20dB (3) 电源:+28V (4) 最大输出功率:2W(33dBm) 设计思路 (1)安装DesignKit模型; (2)直流DC扫描; (3)稳定性分析; (4)偏置电路设计及整...

UVM频率 3万+

软考中级-软件设计师 知识点整理(一篇就过了 建议收藏)

软考中级-软件设计师上午题知识点总结

片言可决讼,半纸能缚龙 17万+

用拓扑图实现多层级关系图(三)可折叠流程图

全矢量可展开的HTML5流程图

TWaver可视化 9430

Apache Kylin 命令注入漏洞复现(CVE-2020-1956)

Apache Kylin 中的静态 API 存在安全漏洞,可以将os命令与用户输入字符串连接起来,攻击者可以在Kylin没有任何保护或验证的情况下执行任何os命令。

0xSec 1558

用拓扑图展现层级和组织关系(三)

互联网购物成了当今非常热门的话题,各种购物网站,手机APP如雨后春笋般涌现出来。什么买衣服,买水果,买米,买油都得到了解决,自从有了这些app,再也不用去超市排着超长的队伍,扛着超重货物,骑着超累的车子了。之前每出一趟门买东西简直是跟参加了一场马拉松似的,现在好了,直接送货到家。那么在购物的背后又有什么样的流程呢,今天我们给大家介绍的是TWaver的另一款流程图。 说到TWaver的流程图却是层...

weixin_30853329的博客 574

31、摩擦学中的材料选择

本博文深入探讨了摩擦学应用中材料选择的重要性,分析了材料的机械、物理和化学属性对摩擦学性能的影响。同时介绍了材料匹配原则、处理方法及表面涂层技术,以优化耐磨性和抗腐蚀性。通过实际案例和评估方法,为读者提供了系统化的材料选择流程和决策依据。

juice的博客 245

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

超炫的业务流程图

前段时间有客户要求做一个动态的业务流程图系统,流程图上需要用有流动的连线效果,连线的流向来表示数据之间的流动。虽然twaver没有提供这种样式的流动效果,但是这个实现起来也不难。先上图: 这张流程图中主要的还是点的流动效果,其他的用twaver实现起来并不难。twaver强大的定制功能,只需要结合美工的图片效果,实现这张图是轻而易举 首先来看看流程图所需的各种矢量图形,比如矩形、圆角矩...

weixin_30741653的博客 582

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

HTML5流程图之矢量可伸展workflow

互联网购物成了当今非常热门的话题,各种购物网站,手机APP如雨后春笋般涌现出来。什么买衣服,买水果,买米,买油都得到了解决,自从有了这些app,再也不用去超市排着超长的队伍,扛着超重货物,骑着超累的车子了。之前每出一趟门买东西简直是跟参加了一场马拉松似的,现在好了,直接送货到家。那么在购物的背后又有什么样的流程呢,今天我们给大家介绍的是TWaver的另一款流程图。说到TWaver的流程图却是层出...

subnetwork的专栏 610

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

3D-echarts的背景和地图表面的贴图

注意:图片的路径设置 绝对路径 或 asset下面的相对路径都没有效果,要把图片放到public路径下面才有效果(此demo是写在v2脚手架中)2.设置背景颜色渐变。3.设置地图表面贴图。

weixin_45096939的博客 6651

java渐变色代码

对象,指定了渐变的方向(从左到右)和颜色(从蓝色到红色)。然后,我们将画笔的渐变色设置为这个对象,并绘制一个矩形来填充渐变色。在这个示例中,我们创建了一个。在Java中,可以使用。

qq_28514075的博客 923

Three.js常见光源类型

常见光源类型 本文是Three.js电子书的5.1节 Threejs虚拟光源是对自然界光照的模拟,threejs搭建虚拟场景的时候,为了更好的渲染场景,往往需要设置不同的光源,设置不同的光照强度,就像摄影师给你拍照要设置各种辅助灯光一样。 光源环境光平行光点光源聚光灯光源基类LightAmbientLight.color颜色.intensity强度属性DirectionalLightPointLi...

u014291990的博客 1265

TWaver3D入门探索——3D拓扑图之绽放的小球花

这样一簇绚烂丰满艳丽多姿的3D小球花,要多少代码才能完成?其实不足百行,您信吗?下面咱就看一下具体实现过程,让您分分钟学会用TWaver HTML5制作3D拓扑图。 搭建3D空间 首先为花簇的绽放建一个展示的舞台。接触过TWaver2D的都知道,box、network是必不可少的,但对3D场景来说,还远远不够。一是要添加镜头位置,确定我们在什么角度和距离进行观察;...

weixin_30360497的博客 474
上一篇: 被忽视的TWaver功能(1)
下一篇: 巧用TWaver 3D 矢量图形功能
subnetwork
博客等级 码龄17年 17粉丝 84原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值