Cesium中实现体渲染
体渲染 Volume Rendering
传统意义上我们构建模型都是通过构建物体的外表面去实现的,例如通过三角面构建模型,或者通过方程的形式构建隐式的表面模型。
而体渲染则是通过 3d 数据集渲染物体的一种方式,典型的 3d 数据集是医学领域上的 CT,CT 是一组 2d 的切片图像(例如,每毫米深度进行一次切片),因此 3d 数据集也可以理解成一组存放 2d 贴图的数组。
通过 3d 数据集可以渲染出具有内部信息的模型。
Threejs 中的体渲染示例
Threejs 中有一些非常优秀的体渲染示例,这次的目的就是在 cesium 中复现这些示例。
体积云
柏林噪声
在 Cesium 中复现
翻看 Threejs 的相关源码,可以很轻松的获取到 3D 贴图数据的计算方式,以及相关的着色器代码。
但是比较麻烦的一点是,Cesium 目前并不支持 sampler3D,并且在默认使用 WebGL1 情况下不支持 glsl 3.0 的语法。
不支持 sampler3D 和 glsl 3.0 的语法的解决办法
对于支持 glsl 3.0 语法的问题,只需要在构建 Viewer 时传入参数,利用 WebGL2 渲染即可。
contextOptions: {requestWebgl2: true, // 开启webgl2
}
而对于 sampler3D 的支持,我的做法是对 Cesium 的源码进行一点改造,仿照 Cesium 原有的 Texture 类,再构建一个 Texture3 类用于传入 sampler3D 纹理。
着色器代码适配
在 Threejs 的顶点着色器中,计算 vOrigin 的方式是传入相机的世界坐标 cameraPos, 再乘以模型矩阵的逆矩阵获得的。
而在 Cesium 中,则可以直接利用内部变量计算得到
vOrigin=czm_encodedCameraPositionMCHigh+czm_encodedCameraPositionMCLow;
片元着色器基本照搬即可,需要注意的是,Threejs 的片元着色器是利用 color 的变量输出最终结果的,因此移植到 Cesium 中还需要将其输出到 gl_FragColor 中
实现效果
实际体验
由于csdn无法放置自定义的html,因此如果想体验实际效果,请移步Cesium中实现体渲染
Cesium中实现体渲染相关推荐
- Cesium中开启等高线渲染
最近接到一个需求,需要在Cesium中基于实时地形开启等高线效果,让用户可以看到真实效果.在网上看了一些资料,许多都是需要付费的或者不提供源码,于是在cesium官网找到了示例代码,以下将具体介绍如何 ...
- Cesium Volumn 体渲染
Cesium中的体渲染 上篇介绍了Cesium中的BoxGeometry的本地坐标获取方法,获取了本地坐标后,我们就可以开始做体渲染相关的东西了.将相机坐标也换算到模型本地坐标,即可计算得到以相机为起 ...
- ThreeJS 中体渲染,利用噪声模拟烟,云
ThreeJS 中体渲染,利用噪声模拟烟,云 体渲染的东西也看了一段时间了,这里结合Three.js中体积云的例子,实现shdertoy中的一个效果,先放效果图. Fire2 (shadertoy.c ...
- Cesium中使用Sampler3D,3D纹理,实现体渲染
Cesium中使用Sampler3D,3D纹理,实现体渲染 Cesium目前(20221231)还不支持直接使用3D纹理,但是其实内部已经可以WebGL2,而且内置常量也有3DTexture.所以,可 ...
- Cesium体渲染,去除Volume中的马赛克
Cesium中体渲染,去除Volume中的马赛克 产生马赛克的原因是所有数据都是真实数据,未对采样结果进行插值处理,上一篇文中采用的是Nearest,所有采样结果都是基于真实数据的,即在不同位置处进行 ...
- Cesium 中的离屏渲染
Cesium 中的离屏渲染 本文参考了众多文章,均列在了最后.先感谢各位的分享精神,如觉有冒犯,请与我联系. 部分内容来自个人理解,欢迎指正交流. 为了达到更加真实的渲染效果或其他计算需求,很多时候需 ...
- 用体渲染的方法在Unity中渲染云(18/4/4更新)
github: https://github.com/yangrc1234/VolumeCloud 更新的内容在底部 最近在知乎上看到一篇文章讲云层的渲染(https://zhuanlan.zhihu ...
- Cesium中的相机—旋转矩阵
在学习坐标旋转的时候,一不小心就会把坐标系的旋转和矢量的旋转弄错,这里给出详细的两种旋转过程: 两种旋转矩阵的定义 下面仅以绕Z轴旋转为例,给出两种旋转的过程定义. 坐标系旋转,点不变(见下左图) 两 ...
- ios 自动缩小字体_小字体紫筑B丸85%中粗体文件+deb双版本
今天带来的是有字由心雨公众号的一款收费字体『紫筑B丸』,我把5字重里面的中粗体提取出来单独缩小至85%后做成了单字重,同时把英文也改变成和中文对应的大小粗度后,整体感觉非常的舒服,也一直是我自用最久的 ...
最新文章
- python中strip函数_让你整明白python strip函数妙用
- Java 类中各成分加载顺序和内存中的存放位置
- U3D+SVN: 两份相同资源放在不同目录下导致META的更改
- HALCON示例程序measure_chip.hdev芯片封装检测
- 未能加载文件或程序集“System.Runtime.Serialization, Version=2.0.5.0, Culture=neutral,
- Git笔记(18) 搭建服务器Git
- 容器、Docker、虚拟机,别再傻傻分不清
- Android:一个简单的秒表实现
- charles浏览器抓包https_十分钟学会Charles抓包(iOS的http/https请求)
- python 返回函数 闭包_python中闭包Closure函数作为返回值的方法示例
- 10小时,就能吃透Kafka源码?
- 搭建mock-server
- JAVA win10 JDK环境配置(内含JDK,eclipse安装包)
- 干5年外包,突然失业了。。。
- 简报 | 菲律宾中央银行已经将数十家数字货币交易所合法化
- java封神OL_MobaXterm:远程终端登录软件封神选手
- php 说说,PHP利用Qzone的说说接口发表说说开发日记
- 简单又复杂的三层网络转发技术
- IC验证-浅谈中断验证(一)
- MIPS汇编 汇编程序简介
热门文章
- 幼儿园故事导入语案例_幼儿园教学导入语
- linux中的伪终端编程,Linux中的伪终端编程 - 残剑_飞雪的个人空间 - 51Testing软件测试网 51Testing软件测试网-软件测试人的精神家园...
- Android 手势导航(从下往上滑动进入多任务页面)
- JS transform
- 区块链运营之误解与成长
- 携手共筑前端面试宝典之JQUERY篇-王大师
- C++中istringstream、ostringstream、stringstream详细介绍和使用
- openshift origin v1.5.0安装
- Identity Card(hdu2629)
- 全球与中国家用自动烘干机市场深度研究分析报告