- 博客(31)
- 资源 (2)
- 收藏
- 关注
原创 Cesium中通过射线计算日照
前段时间接触到一个需求,需要实时的计算建筑的日照,通常优先通过shadow map来实现。通过shadow map可以直接获取某一时刻的光照信息,累积不同太阳光位置的shadow map即可得到物体表面的光照时长。不过本人技术有限,还没能力手撕shadow map,之前看了光线追踪的内容,考虑到也可以通过射线求交的方法来计算物体表面是否直达光源,来累积光照时长。
2023-08-09 23:26:07 1650 7
原创 Cesium中,在shader里访问顶点法向
这样在构造Geometry时,Cesium会自动生成顶点法向。在默认情况下,Cesium开启了数据压缩,将Float32类型的数据压缩。如在BoxGeometry构造时,后,创建Box时,会自动将生成的normal压缩为一个Float,对应shader里面的attribute为。前提条件:使用cesium内部的geometry,非自定义的geometry,比如BoxGeometry。类型,在shader中可以通过解压来直接得到顶点法向。
2023-06-27 08:57:04 508
原创 Cesium体渲染,去除Volume中的马赛克
产生马赛克的原因是所有数据都是真实数据,未对采样结果进行插值处理,中采用的是Nearest,所有采样结果都是基于真实数据的,即在不同位置处进行采样时,会查找相邻的最近体素的数据,用来当作当前位置的体素,所有采样结果会出现马赛克效果。修改为LINEAR即采用线性插值方法,而不是最近的体素值,结果即可比较平滑。
2023-01-19 09:21:44 1392 6
原创 ThreeJS 实现等值线效果
THREE中实现等值线效果等值线如果geometry中的每个顶点有额外的数值用来着色,比如地形模型,每个几何顶点有高程值,可以通过材质实现等高线效果。等值线材质THREE中使用ShaderMaterial来作为等值线的基础材质。这里先预定义一个概念:着色值:顶点附属的观测值,如地形中的高程值。核心思想是通过片元着色器中,对GPU光栅化自动插值后的着色值进行取模,来实现固定间隔的绘制颜色。等值线的线宽暂取固定值,按像素指定。归一化为了计算方便,将着色值归一化到0-1之间,等值线的间隔也计算
2022-05-06 21:24:28 1533 3
原创 Cesium Volumn 体渲染
Cesium中的体渲染上篇介绍了Cesium中的BoxGeometry的本地坐标获取方法,获取了本地坐标后,我们就可以开始做体渲染相关的东西了。将相机坐标也换算到模型本地坐标,即可计算得到以相机为起点的到立方体的射线。体渲染相关的内容参看这篇文章,里面说明了ThreeJS中体渲染的相关内容。先上图模型本地坐标Cesium中的BoxGeometry渲染流程,及模型本地坐标这次模型使用自定义的primitive来实现,直接通过Cesium内置的position来获取本地坐标,不再通过编码后的变量
2022-03-17 22:08:18 9799 17
原创 Cesium中的BoxGeometry渲染流程,及模型本地坐标
通过BoxGeometry探索Cesium中的坐标变换Cesium中有两种对象可以添加到场景中,Entity、Primitive。Entity对用户更友好,方便使用,但是灵活性和性能差一些。Primitive,支持自定义几何形状和几何对象的材质,可以实现更复杂的效果。添加Primitive为了减少需要阅读的代码量,方便调试,将primitive的asynchronous,translucent设置为false,即同步方式加载Box,几何材质为不透明。viewer.scene.primitives.a
2022-02-05 10:42:37 5102 4
原创 ThreeJS 中体渲染,利用噪声模拟烟,云
ThreeJS 中体渲染,利用噪声模拟烟,云体渲染的东西也看了一段时间了,这里结合Three.js中体积云的例子,实现shdertoy中的一个效果,先放效果图。Fire2 (shadertoy.com), 这里是参考的效果,可以自行参看源码。体渲染,Volume Rendering传统建模方式,可以理解为表面建模,通过构建物体外表面,在三维中展示实际物体。相对的,体渲染是从三维数据中生成图像,典型的例子就是医疗上的CT。本文中不涉及体渲染中的光学模型,仅是对数据进行采样,上色。同时简化计算,使
2021-12-11 11:45:27 6913 8
原创 在Cesium中绘制动态线段
在Cesium中绘制动态线段以下实现方法均属野路子。理想中,可以扩展polylinegeometry增加一个customdata属性用于提交除位置外的其他顶点数据,类似于下文使用的color计划实现类似于蚂蚁线的效果,在Cesium中翻看各种材质,没法发现满足条件的material或Appearance。那么只能自己手工实现了。基本思路传递顶点时,附加每个顶点距线段起点的距离,用此距离来实现线段分段shader中对传入的距离取模,即可实现分段绘制不通的颜色使用fabric查看了fa
2021-06-29 21:21:28 5175 3
原创 使用WebGL绘制流动虚线
使用WebGL绘制流动虚线上文中介绍了如何在片元着色器中绘制虚线,通过计算屏幕像素到折线的距离和屏幕像素投影到折线的长度可以绘制折线。接下来尝试使用WebGL2在canvas中绘制流动的折线。需解决的问题顶点数据传输shader中使用的折线顶点数据需要从外部传入,最开始考虑使用uniform vec2[]数组方式传入,但是GPU中数组上限太低,很容易就不够用了,而且数组个数声明必须使用常量,无法从外部传入数组个数,动态的构造数组。因此,我采用纹理方式传入顶点数据,采用纹理方式存储顶点数据明显优于
2021-06-08 20:52:28 1804
原创 如何在Shader中绘制类似虚线的折线
如何在Shader中绘制类似虚线的折线实例代码可以参考shadertoy中的[例子](line with animation (shadertoy.com))核心思想绘制折线在shader中无法通过顺序绘制的方式绘制折线,在参考现有的shadertoy中的例子后,决定采用距离场的方式绘制折线,即计算屏幕上每个像素到给定折线的距离,通过给定线宽来选取折线的范围。绘制虚线通过距离场明确线的范围后,可以将屏幕中每个像素投影到折线上,通过投影到折线上的距离来对线段进行分段,以实现间隔绘制效果。效果图如
2021-06-08 19:52:33 785
原创 vs2019 创建c#代码片段
VS2019创建C#代码片段找到内置代码片段所在目录点击工具->代码片段管理器,弹出代码片段管理界面。在界面中,语言选择CSharp,选择**Visual C#**节点下的一个代码片段,从位置中选择代码片段所在目录。新建代码片段这里,我复制了一份cw代码片段,作为模板文件,将文件结构修改如下:<?xml version="1.0" encoding="utf-8"?><CodeSnippets xmlns="http://schemas.microsoft.com/
2021-04-07 09:54:53 1132
原创 ThreeJS绘制流动的虚线效果
Threejs绘制等距流动线three.js flow lineThree中LineMaterial中支持将线渲染为虚线样式,通过在LineMaterial中引入时间,可以使虚线动起来,产生流动效果。具体效果图如下:LineMaterialThree中绘制线,是采用instance方式来绘制的,每个线段作为一个instance进行绘制,每个instance通过着色器来生成虚线效果。绘制LineGeometry时,LineMaterial中可以通过指定dashed来将线样式渲染为虚线。直接打
2021-01-21 23:59:48 6197 10
原创 Blender 2.9 使用HeightMap创建地形
Blender 2.9 使用HeightMap创建地形创建平面删除场景中默认的立方体,添加Plane,对plane进行适当缩放,plane太小,会导致接下来的无法细分到理想的分辨率。shift+a,从菜单中选择planes, 拖动鼠标对平面进行缩放细分平面切换到Modeling视图,右键选择细分选择细分后,界面坐下放,展开折叠面板,可以输入细分切割的点数添加纹理,dispalce在纹理面板中,选择准备好的HeightMap修改器面板中,添加displace,设置纹理
2020-12-03 23:44:53 3294
原创 GPU中实现反距离加权插值(IDW)
利用GPU实现IDW(反距离加权插值)IDW的实现比较简单,已知插值点位比较少的情况下,可以直接遍历所有插值点,来获取临近的几个点,进行插值运算。插值点较多时,需要可以使用kd-tree来加速临近点的查找。本次仅对小数据量情况进行讨论,将IDW算法在shader中实现,可以方便的使用webgl的裁剪面和强大的并行计算。具体计算流程如下:插值点位提交到GPU数据提交,我使用了uniform数组变量来存储,在渲染过程中,直接提交插值点位的数据,数据类型为vec3,webgl我使用了twgl第三方库(为了偷
2020-10-25 23:36:29 1141 2
原创 下载美拍视频 python
下载美拍视频获取用户ID通过网页端搜索用户,获取用户ID获取页面中的视频地址获取到用户ID后,通过地址https://www.meipai.com/user/userid,访问。在返回的html页面中可以发现data-video标签,其内容即为视频地址,可以先通过正则(?<=data-video=").*(?=")获取,所有data-video标签。视频地址解密此时获取到的视频地址为加密后的地址,需要进行解密,才能获取真实地址,解密参看此博文,解密后即可获取真实地址,通过requests库
2020-10-08 21:14:08 250
原创 WPF command click order
WPF中按钮中Command和click时间的执行顺序<Button Command="{Binding Clear}" Click="ClearClicked"/>click事件会先执行,command中的execute后执行
2020-09-09 12:10:17 496
原创 ASCII Grid
ASCII Grid格式说明http://surferhelp.goldensoftware.com/subsys/subsys_ASC_Arc_Info_ASCII_Grid.htm起源Esri发布的栅格格式,采用可读的文本方式存储栅格栅格数据。格式头文件文件前六行为网格说明信息ncols 4nrows 6xllcorner 0.0yllcorner 0.0cellsize 50.0NODATA_value -9999 -9999 -9999 5 2-999
2020-09-09 12:07:10 1233
原创 使用多边形极点对多边形进行标注
使用多边形极点对多边形进行标注,polygon pole of inaccessibility对应文中名称为自己翻译,仅供参考概念多边形极点,定义为,多边形内距离边界最远的点。我这里用来这个点位来标注凹多边形的名称,如下图,计算多边形质心位置时,不一定会落在多边形为内部,此时可以用极点来表示改多边形内部的点。第三方库, mapbox提供了js库来计算多边形的极点坐标计算原理核心是通过划分规则格网,通过一定策略来确定极点位置计算步骤使用外包矩形宽高的最小值作为网格的初始大小,生
2020-07-12 15:36:17 1352
原创 ppostgres rowid
postgres中的行id原文地址postgres数据库没有rowid这一列,做为记录的唯一索引。然而,ctid在postgres中可以唯一标识一条记录。postgres数据中每张表都有ctid这一字段。表和索引以数组的方式存放,大小固定,一般为8KB。对ctid来说,由BLOCK_ID,ITEM_ID组成,第一个数字表示page number,第二数字表示记录的数量。ctid是按序列增加的,如果更新一条记录,会得到新的ctid,旧的ctid不会再使用,新的ctid替换旧的ctid....
2020-07-05 22:43:23 1757
原创 three.js加载模型后,面显示破碎问题
three.js加载gltf模型后,不同视角浏览的时候,面会被裁剪z-buffer,logarithmicDepthBuffer,near,far原因可能是在初始化模型时,面的部分顶点被放到了深度较深的位置,但是深度信息不更新,导致在一定视角下,面显示不全解决方案将相机near面设置为尽可能大,far尽可能小,在zbuffer中,远近裁剪面会影响深度信息的分辨率(深度精度)。减小场景尺...
2020-04-05 09:13:35 1503
原创 three.js加载dracoy压缩的gltf模型
three.js 加载draco压缩的gltf模型dracohttps://github.com/google/draco谷歌发起的对3d模型和点云的解压缩库。格式转换我们导出的为obj格式模型,需要先转换为gltf格式文件,转换使用cesiumgs提供的OBJ2GLTF工具同样使用cesiumgs提供的GLTF-PIPELINE将标准的gltf压缩为draco格式的gltf模...
2020-04-05 09:10:39 4906 4
原创 c# HttpWebReQuest
using System.Net;using System.Net;using System.Security.Cryptography.X509Certificates; //修改安全协议时用到public static bool CheckValidationResult(object sender, X509Certificate certificate, X509Chain cha...
2018-03-01 14:55:03 309
原创 WPF手写识别
IACore.dll\IALoader.dll\LAWinFX.dll\Microsoft.Ink.dll\Microsoft.InkAnalysis.dll 强调内容手写识别用到WPF中的InkCanvas控件,使用InkCanvas.Strokes来收集用户的手写笔迹。将笔迹存入流中 InkCanvs.Strokes.Save(MemoryStream)从Microsoft.Ink.
2017-04-04 13:12:49 2017 2
原创 手记
ARCMAP中显示线的方向:COGO工具栏中,在编辑状态下,可以显示线的方向。 ARCMAP中VBA编写的宏可以添加到自定义工具栏中。当作按钮使用。 复杂线段可能存在不相连的情况,线段由分离的不同线段组成,在合并为一条线段时,需将线的shape转为GeometryCollection,以此遍历GeometryCollection中的Geometry来获取不同的部分。GeometryCollect
2017-04-04 12:41:19 263
原创 SharpMap渐变色填充多边形
通过设置图层的Theme属性为SharpMap.Rendering.Thematics.CustomTheme,即可实现使用渐变色填充多边形。 具体代码如下: SharpMap.Rendering.Thematics.CustomTheme customTheme = new SharpMap.Rendering.Thematics.CustomTheme(GetCustomStyle);
2016-10-09 18:47:43 1090
原创 欢迎使用CSDN-markdown编辑器
Q:DataTable添加行时提示,该行已经属于另一个表 A:解决方法:DataTable.Rows.Add(row.ItemArray).Q:DataGridview.Rows.Clear(),清空表格数据时,提示datagrid 不能清除此列表解决方法。 A:绑定了数据源的列表不能使用clear清空数据。手动添加row的可以使用clear来清除数据。解决办法:重新绑定数据源,如先获取当前表格
2016-04-18 23:13:14 174
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人