primitive 的 Appearance编写着色器材质

在这里插入图片描述

import { nextTick, onMounted, ref } from 'vue'
import * as Cesium from 'cesium'
import gsap from 'gsap'

onMounted(() => { ... })

// 1、创建矩形几何体,`Cesium.RectangleGeometry`:几何体,`Rectangle`:矩形
let rectGeometry = new Cesium.RectangleGeometry({
	rectangle: Cesium.Rectangle.fromDegrees(
		115, // 西边的经度
		20, // 南边维度
		135, // 东边经度
		30 // 北边维度
	),
	height: 0, // 矩形的高度:0,意味着,它紧贴地球表面
	
	`vertexFormat:顶点格式,这里使用`PerInstanceColorAppearance`的顶点格式,允许每个实例有独立的颜色`
	// vertexFormat: Cesium.PerInstanceColorAppearance.VERTEX_FORMAT
	
	`如果使用【Cesium.Material.fromType】这里的【vertexFormat】就必须用这个EllipsoidSurfaceAppearance`
	vertexFormat: Cesium.EllipsoidSurfaceAppearance.VERTEX_FORMAT
})

// 2、创建几何体实例,`Cesium.GeometryInstance`:几何体实例
let instance = new Cesium.GeometryInstance({
	id: 'redRect',
	geometry: rectGeometry, // 将,矩形几何体`rectGeometry`,赋给实例
	// 定义实例的属性
	attributes: {
		// 设置颜色为红色,透明度为0.5
		color: Cesium.ColorGeometryInstanceAttribute.fromColor(Cesium.Color.RED.withAlpha(0.5))
	}
})

let rectGeometry_1 = new Cesium.RectangleGeometry({
	rectangle: Cesium.Rectangle.fromDegrees(
		140, // 西边的经度
		20, // 南边的纬度
		160, // 东边的经度
		30 // 北边的纬度
	),
	height: 0 // 矩形的高度:0,意味着,它紧贴地球表面
})
let instance_1 = new Cesium.GeometryInstance({
	id: 'blueRect',
	geometry: rectGeometry_1,
	attributes: {
		color: Cesium.ColorGeometryInstanceAttribute.fromColor(Cesium.Color.BLUE.withAlpha(0.5))
	},
	vertexFormat: Cesium.EllipsoidSurfaceAppearance.VERTEX_FORMAT
})


// 3、设置外观
let material_1 = new Cesium.Material({
	fabric: {
		type: 'Color',
		uniforms: {
			color: new Cesium.Color(1.0, 0.0, 0.0, 0.5)
		}
	}
})
let material_1 = new Cesium.Material({
	fabric: {
		type: 'Image',
		uniforms: {
			image: '../public/texture/logo.png'
		}
	}
})
console.log('material_1=', material_1)
console.log('material_1=', material_1.shaderSource)


`【编写着色器材质】`
let material_1 = new Cesium.Material({
	``fabric`属性,是Cesium材质的核心,它允许你使用GLSL(OpenGL Shading Language)代码来自定义材质的行为】`
	fabric: {
			uniforms: {
				uTime: 0
			},
			// source:GLSL源代码
			source: `
				// czm_getMaterial(), 是GLSL函数的开始, 是Cesium材质系统的核心
				czm_material czm_getMaterial(czm_materialInput materialInput){
				
					// 调用 czm_getDefaultMaterial 函数, 初始化为Cesium的默认材质, 这允许你在默认材质的基础上进行修改
					czm_material material = czm_getDefaultMaterial(materialInput); // 官方默认
					
					// ----------- 自定义内容-start -----------
					
					// 效果一
					// 将材质的, 漫反射颜色, 设置为红色(RGB: 1.0, 0.0, 0.0), 这意味着对象将显示为红色
					// material.diffuse = vec3(1.0, 0.0, 0.0);
					
					// 效果二: materialInput.st ,是一个包含纹理坐标的二维向量
					// material.diffuse = vec3(materialInput.st, 0.0);
					
					// 效果三
					material.diffuse = vec3(materialInput.st+uTime, 0.0);
					
					// 效果四:条纹效果
					// float strength = mod((materialInput.st.s+uTime) * 10.0, 1.0); // 加减的作用:调整方向
					// float strength = mod((materialInput.st.s-uTime)*10.0, 1.0);
					// float strength = mod((materialInput.st.t-uTime)*10.0, 1.0);
					// material.diffuse = vec3(strength, 0.0, 0.0);
					
					// 效果五
					float strength = mod((materialInput.st.x-uTime) * 10.0, 1.0);
					material.diffuse = vec3(strength, 0.0, 0.0);
					
					// ----------- 自定义内容-end -----------
					
					return material; // 官方默认
				}
			`
	}
})

gsap.to(material_1.uniforms, {
	uTime: 1,
	duration: 2,
	repeat: -1,
	ease: 'linear'
})




// ---------------------------- start 着色器 编写 appearance ----------------------------
`
	`EllipsoidSurfaceAppearance`:设置,几何体都是与地球的椭球体平行,
		假定,几何体 与 地球的椭球体 平行,
		就可以,在计算大量顶点属性的时候节省内存。`
let appearance = new Cesium.EllipsoidSurfaceAppearance({
	// material: material_1,
	// aboveGround: true, // true:几何体将渲染在地面之上;false:几何体可能部分或全部嵌入地面以下
	// translucent: true
	
	fragmentShaderSource: `
		varying vec3 v_positionMC; // 模型坐标下的位置
		varying vec3 v_positionEC; // 眼坐标(或地球中心坐标)下的位置
		varying vec2 v_st; // 纹理坐标
		uniform float uTime;
		
		void main(){
			czm_materialInput materialInput;
			
			gl_FragColor = vec4(v_st, uTime, 1.0);
		}
	`
})

appearance.uniforms = {
	uTime: 0
}

gsap.to(appearance.uniforms, {
	uTime: 1,
	duration: 2,
	repeat: -1,
	yoyo: true,
	ease: 'linear'
})

console.log('appearance=', appearance)
console.log('appearance.vertexShaderSource=', appearance.vertexShaderSource)
console.log('appearance.fragmentShaderSource=', appearance.fragmentShaderSource)

// ---------------------------- end 着色器 编写 appearance ----------------------------



// 4、创建图元:`Cesium.Primitive`:创建一个图元,它是Cesium中用于渲染的最基本单位 `
let primitive = new Cesium.Primitive({
	geometryInstances: [instance, instance_1], // 将之前创建的几何体实例赋给图元
	appearance: appearance, // 将之前创建的外观赋给图元
	show: true
})




nextTick(() => {
	setView()
		
	// 5、添加到Viewer
	viewer.value.scene.primitives.add(primitive)
})



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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

31_搭建Redis分片集群

Redis的主从复制模式和哨兵模式可以解决高可用、高并发读的问题。但是依然有两个问题没有解决:海量数据存储问题、高并发写的问题。由于数据量过大,单个master复制集难以承担,因此需要对多个复制集进行集群,形成水平扩展每个复制集只负责存储整个数据集的一部分,这就是Red…

快速上手 INFINI Console 的 TopN 指标功能

背景 在分布式搜索引擎系统(如 Easysearch、Elasticsearch 和 OpenSearch)中,性能监控至关重要。为了确保系统的高效运行和资源的合理分配,我们通常需要关注一段时间内关键资源的使用情况,特别是索引、节点和分片的内…

风水算命系统架构与功能分析

系统架构 服务端:Java(最低JDK1.8,支持JDK11以及JDK17)数据库:MySQL数据库(标配5.7版本,支持MySQL8)ORM框架:Mybatis(集成通用tk-mapper,支持myb…

探索AGI:智能助手与自我赋能的新时代

目录 1 AGI1.1 DeepMind Levels(2023年11月)1.2 OpenAI Levels(2024年7月)1.3 对比与总结1.4 AGI可能诞生哪里 2 基于AI的智能自动化助手2.1 通用型大模型2.2 专业的Agent和模型工具开发框架2.3 编程与代码生成助手2.4 视频和多模态生成2.5 商…

工具推荐:PDFgear——免费且强大的PDF编辑工具 v2.1.12

PDFgear——免费且强大的PDF编辑工具 v2.1.12 软件简介 PDFgear 是一款 完全免费的 PDF 软件,支持 阅读、编辑、转换、合并 以及 跨设备签署 PDF 文件,无需注册即可使用。它提供了丰富的 PDF 处理功能,极大提升了 PDF 文件管理的便捷性和效…

【机器学习】L1正则化与L2正则化

L1,L2正则化解决过拟合问题 目录 过拟合的原因 正则化的目标 L1,L2正则化 L1正则化 L2正则化 从概率的角度来看 L1 正则化与拉普拉斯分布 L2 正则化与高斯分布 过拟合的原因 过拟合发生时,模型学习到了训练数据中的噪声或细节&am…

【PyQt】如何在mainwindow中添加菜单栏

[toc]如何在mainwindow中添加菜单栏 如何在mainwindow中添加菜单栏 主要有两种方法: 1.直接创建mainwindow进行添加 2.使用ui文件加载添加 第二种方法更为常见,可以应用到实际 1.直接创建mainwindow进行添加 import sysfrom PyQt5.QtWidgets import …

1.组件的三大组成部分注意点(结构/样式/逻辑)scoped解决样式冲突/data是一个函数2.组件通信组件通信语法父传子子传父

学习目标 1.组件的三大组成部分注意点(结构/样式/逻辑) scoped解决样式冲突/data是一个函数 2.组件通信 组件通信语法 父传子 子传父 非父子通信(扩展) 3.综合案例:小黑记事本(组件版) …

Sqoop1.4.7安装

环境说明 准备三台服务器,分别为:bigdata141(hadoop 主节点)、bigdata142、bigdata143确保 hadoop 集群先启动好,hadoop 版本为 3.2.0如果只安装不使用的话,以上可以暂时不用管另准备一台服务器&#xff0…

Oracle重启后业务连接大量library cache lock

一、现象 数据库和前段应用重启后,出现大量library cache lock等待事件。 二、分析解决 本次异常原因是:原因定位3: 库缓存对象无效 Library cache object Invalidations 三、各类情况具体分析如下 原因定位1:由于文字导致的非…

Demo15:DS1302涓流充电时钟芯片

一、实验现象 通过DS1302 涓流充电时钟芯片,在数码管上显示电子时钟时分秒,格式为“XX-XX-XX” 二、核心知识点 - DS1302时序 三、项目结构 main.c /************************************************************************************** 实验名称…

HTB:Bastion[WriteUP]

目录 连接至HTB服务器并启动靶机 信息收集 使用rustscan对靶机TCP端口进行开放扫描 将靶机TCP开放端口号提取并保存 使用nmap对靶机TCP开放端口进行脚本、服务扫描 使用nmap对靶机TCP开放端口进行漏洞、系统扫描 使用nmap对靶机常用UDP端口进行开放扫描 使用enum4linux…

易语言文字识别OCR

一.引言 文字识别,也称为光学字符识别(Optical Character Recognition, OCR),是一种将不同形式的文档(如扫描的纸质文档、PDF文件或数字相机拍摄的图片)中的文字转换成可编辑和可搜索的数据的技术。随着技…

Harry技术添加存储(minio、aliyun oss)、短信sms(aliyun、模拟)、邮件发送等功能

Harry技术添加存储(minio、aliyun oss)、短信sms(aliyun、模拟)、邮件发送等功能 基于SpringBoot3Vue3前后端分离的Java快速开发框架 项目简介:基于 JDK 17、Spring Boot 3、Spring Security 6、JWT、Redis、Mybatis-P…

重邮+数字信号处理实验七:用 MATLAB 设计 IIR 数字滤波器

一、实验目的 1 、加深对窗函数法设计 FIR 数字滤波器的基本原理的理解。 2 、学习用 Matlab 语言的窗函数法编写设计 FIR 数字滤波器的程序。 3 、了解 Matlab 语言有关窗函数法设计 FIR 数字滤波器的常用函数用法。 4 、掌握 FIR 滤波器的快速卷积实现原理。…

73.矩阵置零 python

矩阵置零 题目题目描述示例 1:示例 2:提示: 题解思路分析Python 实现代码代码解释提交结果 题目 题目描述 给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。 示例…

Chromium 132 编译指南 Windows 篇 - 配置核心环境变量 (三)

1. 引言 在之前的 Chromium 编译指南系列文章中,我们已经完成了编译前的准备工作以及 depot_tools 工具的安装与配置。本篇我们将聚焦于 Chromium 编译过程中至关重要的环境变量设置,这些配置是您顺利进行 Chromium 构建的基石。 2. 启用本地编译&…

C++中线程同步与互斥的4种方式介绍、对比、场景举例

在C中,当两个或更多的线程需要访问共享数据时,就会出现线程安全问题。这是因为,如果没有适当的同步机制,一个线程可能在另一个线程还没有完成对数据的修改就开始访问数据,这将导致数据的不一致性和程序的不可预测性。为…

【dockerros2】ROS2节点通信:docker容器之间/docker容器与宿主机之间

🌀 一个中大型ROS项目常需要各个人员分别完成特定的功能,而后再组合部署,而各人员完成的功能常常依赖于一定的环境,而我们很难确保这些环境之间不会相互冲突,特别是涉及深度学习环境时。这就给团队项目的部署落地带来了…

【2025最新】100%通过的计算机毕设新题目

五个类别的计算机毕业设计题目10个,需要更多新鲜题目请私信博主。 类别一:人工智能与机器学习 题目1:基于深度学习的图像识别系统 内容解释:开发一个使用深度学习技术的图像识别系统,能够识别并分类各种物体、场景…