Cesium自定义着色器构件三角面片【闪烁】问题,但是一移动视角就闪烁

 问题:已知各个顶点的坐标信息、颜色和索引信息,并自定义绘制三角面片。

但是绘制的三角面片随着视角稍微改动就会出现闪烁现象!!!why?

Cesium数据类型的精度问题,例如下面为了获取能接收到高精度坐标信息,设置了两个attribute vec3 类型变量!!!依据此,若接收的顶点信息为高精度的信息,也需按照此类型设置!

attribute vec3 position3DHigh;  
attribute vec3 position3DLow;  
attribute vec3 normal;  
attribute vec2 st;  
attribute float batchId; // 注意:batchId通常在着色器中不直接使用,除非有特定需求  varying vec3 v_positionEC;  
varying vec3 v_normalEC;  
varying vec2 v_st;  void main()  
{  // Cesium使用高精度的位置编码,但通常不建议在顶点着色器中直接拆分它们  // 这里我们假设Cesium的内置函数已经处理了这一点  vec4 positionWC = czm_computePosition(); // 使用Cesium的内置函数来获取世界坐标  // 如果你确实需要模型坐标(通常不需要,因为大多数渲染操作都在世界或相机坐标系中),  // 你可以通过世界坐标和模型矩阵的逆来计算,但Cesium通常不这样做  // vec4 positionMC = czm_inverseModel * positionWC; // 这行通常不是必需的  // 获取相机坐标下的位置  v_positionEC = (czm_modelViewRelativeToEye * positionWC).xyz;  // 获取相机坐标下的法线(注意:法线也需要考虑模型的变换,但Cesium通常通过切线空间来处理法线映射)  v_normalEC = czm_normal * normal; // 这里假设czm_normal已经包含了从模型到相机的变换  // 传递纹理坐标  v_st = st;  // 设置gl_Position为裁剪空间坐标  gl_Position = czm_modelViewProjectionRelativeToEye * positionWC;  // batchId通常用于在片元着色器中实现批处理或选择特定的渲染路径  // 但它不会在顶点着色器中直接使用,除非有特定的逻辑需要它  
}

注意

  1. 高精度位置Cesium使用position3DHighposition3DLow来编码高精度位置,但通常你不需要在顶点着色器中直接处理它们。Cesium的czm_computePosition()函数会为你处理这些。

  2. 法线变换:在上面的代码中,我假设czm_normal已经包含了从模型空间到相机空间的变换。然而,在法线映射的情况下,你可能需要使用不同的变换矩阵(通常是模型矩阵的逆的转置),这取决于你的具体需求和Cesium的版本。

  3. batchId:如果你的渲染逻辑依赖于批处理或需要根据不同的batchId选择不同的渲染路径,你可能需要在片元着色器中处理这个batchId

  4. 性能和最佳实践:在顶点着色器中避免不必要的计算,特别是那些可以通过Cesium的内置函数或更高效的算法来优化的计算。

 

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

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

相关文章

系统架构师考点--信息系统基础知识

大家好。今天我们来总结一下信息系统基础知识的相关考点,每年都会考,一般是在上午场选择题中,占3分左右,其次下午场论文也有可能会出相关的考题。 一、信息系统概述 信息系统: 是由计算机硬件、网络和通信设备、计算…

selenium,在元素块下查找条件元素

def get_norms_ele_text(self):elementsself.get_norms_elements()locBy.CSS_SELECTOR,"div.sku-select-row-label"by loc[0] # 获取By类型,例如By.CSS_SELECTORvalue loc[1] # 获取具体的CSS选择器字符串,例如"div.sku-select-row-l…

Java虚拟机面试题汇总

目录 1. JVM的主要组成部分及其作用? 1.1 运行时数据区划分? 1.2 哪些区域可能会发生OOM? 1.3 堆和栈的区别? 1.4 内存模型中的happen-before是什么? 2. HotSpot虚拟机对象创建流程? 2.1 类加载过程…

CoppeliaSim的简单教程

文章目录 一、 CoppeliaSim1.0 CoppeliaSim 简介1.1 CoppeliaSim 安装1.2 CoppeliaSim 使用 一、 CoppeliaSim 1.0 CoppeliaSim 简介 CoppeliaSim(原V-REP)是一个机器人仿真平台,里面有很多来自别的公司的机器人模型以及完备的物理引擎,我们可以通过 p…

数据库之SQL(二)

目录 一、简述SQL中如何将“行”转换为“列” 二、简述SQL注入 三、如何将一张表的部分数据更新到另一张表 四、WHERE和HAVING的区别 一、简述SQL中如何将“行”转换为“列” 我们以MySQL数据库为例,来说明行转列的实现方式。 首先,假设我们有一张分…

C# —— FileStream文件流

一个文件进行读写的时候,会变成一个文件流 FileStream类 输入流 用于从文件进行读取文件 输出流,向文件写入操作 I/O 类就是对应文件的操作的类 I/O类 包含各种不同的类 用于执行各种文件操作,创建文件删…

数据库中的schema和database

一、什么是schema schema可以简单理解为就是一个具体的数据库实例,不同的实例可以有不同的组成以及约束规则,比如数据库的字符编码方式、执行引擎等等。一个数据库服务器中可以包含多个schema,就像可以包含多个数据库实例一样。 二、如何创建…

使用stream流过滤对象中相同的属性值

使用stream流过滤对象中相同的属性值 文章目录 使用stream流过滤对象中相同的属性值前言一、使用stream流过滤集合对象中相同属性1.创建一个实体类2.创建一个过滤工具类3.创建一个测试类 总结 前言 我们在开发项目中,有很多需求是需要集合根据某个属性筛选出重复的…

什么是前端?

1、什么是前端? 将产品的UI设计稿在用户终端上实现,这就是前端。 简单来讲,前端要做的就是将产品的UI设计稿在用户终端上实现,因此可以说用户看到的所有视觉和交互都是前端的工作领域。 根据这个定义,我们可以把前端…

移动校园(8): Uniapp 中路由守卫进行用户权限管理--不同用户不同功能

思路,在登录之后将用户类型type写入本地存储,然后在前置路由守卫里面读取然后鉴权。 路由守卫VS拦截器 路由守卫主要管理前端之间页面的跳转 拦截器管理后端交互, 所以说权限管理需要路由守卫来做。 但是没有原生路由守卫,查…

A65 STM32_HAL库函数 之 USART通用驱动 -- A -- 所有函数的介绍及使用

A65 STM32_HAL库函数 之 USART通用驱动 -- A -- 所有函数的介绍及使用 1 该驱动函数预览1.1 HAL_USART_Init1.2 HAL_USART_DeInit1.3 HAL_USART_MspInit1.4 HAL_USART_MspDeInit1.5 HAL_USART_Transmit1.6 HAL_USART_Receive1.7 HAL_USART_TransmitReceive1.8 HAL_USART_Transm…

Echarts桑基图

关于Echarts的使用方法参考:vue2中echarts的使用_vue2中使用echarts-CSDN博客 实现效果: 代码: var sysT {"用采": #2D9BFF,"营销系统": #39BFFF,"ERP": #76C2FF,"财务管控": #5F57FC,"PMS&…

Java面试八股之描述一下MySQL使用索引查询数据的过程

描述一下MySQL使用索引查询数据的过程 1.解析查询语句与查询优化 用户提交一个 SQL 查询语句,MySQL 的查询解析器对其进行词法分析和语法分析,生成解析树。 查询优化器根据解析树、表结构信息、统计信息以及索引信息,决定是否使用 B树索引…

QProgressDialog 在进度条达到最大值时自动关闭,屏蔽esc和cancel按钮

使用QProgressDialog来展示当前任务执行进度 QProgressDialog 默认会在进度达到设定的最大值时自动关闭。 setAutoReset()设置为false或setAutoClose()设置为false时对话框无法自动关闭。 功能设计 任务未完成时,不允许其他操作,对话框设置为模态阻塞…

昇思MindSpore学习总结十二 —— ShuffleNet图像分类

当前案例不支持在GPU设备上静态图模式运行,其他模式运行皆支持。 1、ShuffleNet网络介绍 ShuffleNetV1是旷视科技提出的一种计算高效的CNN模型,和MobileNet, SqueezeNet等一样主要应用在移动端,所以模型的设计目标就是利用有限的计算资源来达…

拖拽排序 + 置顶和置底逻辑的实现

最近在实现拖拽排序、置顶和置底逻辑时遇到了比较恶心的问题。以下为记录 背景 我们系统的排序是基于数据库中的 sort_num 字段进行的,sort_num 值越大,数据排位越靠前。新增数据时,其 sort_num 默认为其 id 值。假设当前有 10 条数据&…

Linux实战记录

踩坑实录: day2: 最坑:安装UB居然不知道创建文件夹。 1.虚拟机上不了网:多重置几次 网卡 2.Winscp链接主机: 用户名 就是 linux terminal中的 第一个用户名!

mybatis-plus参数绑定异常

前言 最近要搞个发票保存的需求,当发票数据有id时说明是发票已经保存只需更新发票数据即可,没有id时说明没有发票数据需要新增发票;于是将原有的发票提交接口改造了下,将调用mybatis-plus的save方法改为saveOrUpdate方法&#xff…

架构设计(2)云原生架构与实例部署

云原生架构 云原生架构是一种面向云环境设计和构建应用程序的方法论,旨在充分利用云计算的优势,如弹性、自动化和可扩展性,以实现更高效、可靠和灵活的应用部署和管理。以下是云原生架构的核心理念和关键特点: 核心理念&#xf…

opencv读取视频文件夹内视频的名字_时长_帧率_分辨率写入excel-cnblog

看视频的时候有的视频文件名贼长。想要翻看,在文件夹里根本显示不出来,缩短又会丢失一些信息,所以我写了一份Python代码,直接获取视频的名字,时长,帧率,还有分辨率写到excel里。 实际效果如下图…