- 博客(98)
- 收藏
- 关注
原创 10、基于osg引擎生成热力图高度图实现3D热力图可视化、3D热力图实时更新(带过渡效果)
【代码】10、基于osg生成高度图、实现3D热力图可视化、3D热力图实时更新(带过渡效果)
2025-03-17 11:21:11
579
原创 7、基于osg引擎实现读取vtk数据通过着色器实现简单体渲染(1)
【代码】7、基于osg引擎实现读取vtk数据通过着色器实现简单体渲染(1)
2025-03-13 17:07:17
452
4
原创 6、片元着色器之gamma校正
经过gamma校正的颜色值处于gamma空间,反之颜色值处于线性空间,我们在片元着色器中计算光照时,需要使用线性空间的颜色值,但是从纹理图片中读取到的颜色值都是gamma空间的,需要应用gamma反校正将其转换为线性空间的颜色值,在进行光照计算,才能够得到真实的结果。计算完毕后,再将最后的计算结果应用gamma校正,最终输出gamma空间的颜色值。此时屏幕显示的颜色和片元着色器输出的颜色一致。2、片元着色器中纹理的gamma反校正。是片元着色器输出的颜色值,是显示器实际显示的颜色值,
2024-11-08 14:18:03
1198
原创 浏览器交互事件汇总
事件类别事件名称触发条件适用设备指针事件 / Pointer Eventspointerdown用户按下指针设备(如鼠标、触摸屏、触控笔)所有设备pointermove指针设备在屏幕上移动所有设备pointerup用户松开指针设备所有设备pointercancel系统取消指针操作所有设备鼠标事件 / Mouse Eventsmousedown用户按下鼠标按钮桌面端mousemove鼠标在屏幕上移动桌面端mous
2024-11-08 09:55:54
454
原创 5、片元着色器之基础光照模型:Phong模型和Blinn-Phong模型
Blinn-Phong光照模型是Phong光照模型的一种改进,主要用于计算镜面反射光的强度。相较于Phong模型,Blinn-Phong模型在计算上更加高效,并且能够更好地模拟光照效果。Phong模型需要计算反射光线,是有一定计算量的,Blinn-Phong使用半角向量来简化计算。Phong模型就是在兰伯特模型的基础上增加了镜面反射光的计算。具体来说,兰伯特模型只考虑漫反射光,而Phong模型在此基础上引入了镜面反射光的概念,以模拟光线在光滑表面反射时产生的高光效果。3、Blinn-Phong模型。
2024-10-30 16:47:19
696
原创 4、片元着色器之光线步进及其和兰伯特光照模型的结合应用
光线步进(Ray Marching)是一种用于渲染和追踪的技术,尤其在处理体积数据和隐式表面时非常有效。与传统的光线追踪方法不同,光线步进不直接计算光线与物体的交点,而是通过在光线上逐步前进来寻找相交的表面。这种方法通常用于场景中存在复杂几何体或体积效果的情况。光线步进+半兰伯特(gif经过压缩,质量有点不好)光线步进+兰伯特(gif经过压缩,质量有点不好)性能开销大,尤其是在高分辨率和复杂场景中;需要精心调整步长,以平衡渲染质量和性能。灵活性高,可以处理复杂场景;1、什么是光线步进?适合动态场景的渲染;
2024-10-30 16:16:11
983
原创 3、片元着色器之基础光照模型:兰伯特和半兰伯特光照模型
它是在兰伯特模型基础上的改进,主要用于避免在光照角度较小时出现过暗的情况,从而使物体的暗面更加明亮,看起来更自然。,基于兰伯特余弦定律。原理是:表面接收到的光强度与入射光线和表面发现之间的夹角的余弦值成正比。兰伯特光照模型(Lambertian Lighting Model)是一种。可通过法线向量和光源向量的点积计算得出。是漫反射系数,表示表面对光的反射程度。是入射光线和表面法线之间的夹角。
2024-10-30 13:30:00
862
原创 1、片元着色器之有向距离场(SDF)
有向距离场(Signed Distance Field, SDF)是一种在计算机图形学中常用的概念,用于描述空间中某一点到某个形状表面距离的有符号距离。SDF 被广泛应用在实时渲染、碰撞检测、形状表示等场景中。最典型的例子:判断一个点是否在圆内:点到圆心的距离和半径的差是否为负值,负值说明在圆内,反之则在圆上或圆外。1、什么是有向距离场?
2024-10-29 18:30:00
482
原创 3、顶点着色器之投影矩阵
将物体从相机坐标系投影到裁剪空间,经过投影矩阵变换后的坐标是归一化的,通常称为归一化设备坐标(NDC,Normalized Device Coordinates)。在这个坐标系中,所有顶点的坐标都被映射到一个标准立方体(称为裁剪空间),这个立方体的范围在每个纬度上都是从-1到1。
2024-10-29 10:43:40
1124
原创 开源跨平台三维模型轻量化软件osgGISPlugins-2、如何编译
讲述如何在windows/linux环境下编译osgGISPlugins项目
2024-10-06 10:06:20
865
原创 开源跨平台三维模型轻量化软件osgGISPlugins-1、简介
osg引擎的gis插件,能够读取、显示3dmax导出的具有PBR材质的fbx文件、导出gltf/glb/b3dm/i3dm文件、读取/导出ktx2格式图片、读取/导出webp格式图片。工具:b3dm转gltf/glb;3D模型转3dtiles;3D模型简化多张纹理打包成一个纹理图集;将b3dm文件转换为gltf/glb文件。
2024-10-06 09:34:54
2473
1
原创 vcpkg国内镜像源替换
至此,国内镜像源替换完毕(不一定全部第三方库的镜像源都替换完毕了,但是可以保证大部分镜像源都替换完毕,亲测可用)
2024-07-02 13:07:00
7089
11
原创 地理坐标系、投影坐标系、ECEF坐标系(地心地固坐标系)、ENU坐标系(站心坐标系)的区别
一种描述二维空间的坐标系,众所周知,地球不是规则球体、近似于椭球体,为了能较为准确的进行定位,人们将地球抽象成为一个规则的逼近原始自然地球表面的椭球体,称为参考椭球体,然后在参考椭球体上定义一系列的经线和纬线构成经纬网,从而达到通过经纬度来描述地表点位的目的。地理坐标系+投影函数,将曲面转换为平面,它是一种平面直角坐标系。
2024-06-03 19:19:16
2976
原创 C++ 函数前后使用 const 的作用
2、在函数后面使用const =0 (都是和virtual关键字同时使用的),表示是一个纯虚函数,拥有纯虚函数的类称为抽象类,不能进行实例化,但是可以创建指针和引用来指向子类。在函数后面添加const表示函数不可以修改class类的成员。在函数前面添加const表示返回值为const类型的变量;
2024-05-06 10:06:31
423
原创 12、虚幻引擎中的文件操作:获取当前文件夹下的子文件夹、根据后缀名获取当前文件夹下的所有文件
2、根据后缀名获取指定文件夹的所有文件。1、获取指定文件夹的所有子文件夹。
2024-04-28 11:31:30
636
原创 11、通过MeshDescription(FMeshDescription)构建RenderData(FStaticMeshRenderData)、通过RenderData构建UStaticMesh
这个方法实际就是UStaticMesh的实例方法BuildFromMeshDescription,但是进行了改动,改动部分主要是增加了MaterialIndex参数,原始方法是自动计算的,但是这里进行了指定,因为自动计算需要UStaticMesh参与,但是此时还没有UStaticMesh。实际上这个方法也是来自UStaticMesh的实例方法BuildRenderDataFromMeshDescriptions,但是进行了删减。实际上通过2)中的方法进行构建的。
2024-04-28 11:24:11
904
1
原创 10、将osg的Geometry转换为虚幻引擎的UStaticMesh
将osg::Geometry转换为FMeshDescription,通过FMeshDescription即可构建UStaticMesh,下面这段代码主要是为了转换倾斜摄影的osgb数据,但是倾斜摄影数据中本身不携带法线数据,也不需要计算法线,因此如果要转换其他携带或需要计算法线的osg::Geometry的数据,请另行将法线信息补充到FMeshDescription中。
2024-04-19 11:51:53
392
1
原创 9、osg的texture转换为虚幻引擎的UTexture2D
从osg::Texture中读取纹理图片,并动态转换为虚幻引擎的UTexture2D,不过这段代码只能转换图片格式为R8G8B8A8的纹理图片,其他格式请根据实际情况进行修改。
2024-04-19 11:46:20
406
原创 7、虚幻引擎在c++代码中获取视椎体平面、fov、视点和视椎体剔除
为什么没有far平面呢,跟踪源码可知,远平面并不是固定的是动态计算的,我目前的需求也不需要获取远平面。而且远平面也可以根据自己的需要动态指定。4、视椎体剔除(在osg坐标系下进行剔除(我把虚幻坐标转换为osg坐标了,我的需求就是这样,也可以在虚幻坐标系下进行剔除))3、获取视椎体的near、top、bottom、left、right的平面(透视相机)2、获取视点坐标(世界坐标系)和视口高度。
2024-04-19 11:37:25
348
原创 6、倾斜摄影的osgb数据坐标和虚幻引擎的世界坐标的互转
借助前面的方法已经得到了虚幻或osg的局部坐标下的坐标,同理,只要将局部坐标系的坐标原点(其在某个引擎的世界坐标系下的坐标)也转换到osg或虚幻引擎的坐标,即得到转换后的坐标原点(在另一个引擎的世界坐标下下的坐标),坐标原点+转换后的局部坐标=最终的转换后的世界坐标。局部坐标系下的坐标转换就是直接将osgb的顶点坐标转换为虚幻的坐标,但是两者都是在局部坐标下下的坐标,不同的是前者是osg引擎中的局部坐标系,后者是虚幻引擎的局部坐标。2、局部坐标系下的转换。3、世界坐标系下的转换。
2024-04-19 11:18:50
786
原创 5、“UStaticMesh::GetPhysicsTriMeshData: CPU data not available on selected LOD”
2、解决办法:FBuildMeshDescriptionsParams的bAllowCpuAccess属性设置的true。
2024-04-19 11:05:38
437
原创 GDAL开发教程(读取中文名文件、中文属性表、EPSG编码(PROJ.DB文件读取)、GDAL_DATA文件读取、矢量数据读取、常见对象的销毁与内存释放等)
【代码】GDAL开发教程(读取中文名文件、中文属性表、EPSG编码(PROJ.DB文件读取)、GDAL_DATA文件读取、矢量数据读取、常见对象的销毁与内存释放等)
2024-03-26 17:10:44
585
原创 4、C++开发时检测当前是否为虚幻编辑器状态及获取WorldContextObject
【代码】4、C++开发时检测当前是否为虚幻编辑器状态及获取WorldContextObject。
2024-03-14 16:43:27
582
原创 2、NewObject的三种原型(来自GPT)
1)Outer:该对象的外部对象,通常是父级对象。6)InInstanceGraph:对象的实例化图,用于指定对象实例化的图形上下文。6)InInstanceGraph:对象的实例化图,用于指定对象实例化的图形上下文;3)Flags:对象的标志,用于设置对象的状态,默认为RF_NoFlags;3)Flags:对象的标志,用于设置对象的状态,默认为RF_NoFlags;1)Outer:该对象的外部对象,通常是父级对象;1)Outer:该对象的外部对象,通常是父级对象;2)Name:对象的名称;
2024-03-12 15:53:44
739
原创 1、通过MeshDescription在运行时构建StaticMesh并设置碰撞、修改材质
虚幻5.3在运行时(Runtime)构建StaticMesh并为其设置碰撞和材质的方法
2024-03-08 15:58:51
1700
4
原创 Web地图服务规范之栅格瓦片地图服务:WMTS(WebMapTileService,网络地图瓦片服务)、TMS(TileMapService,瓦片地图服务)和XYZ
Web地图服务规范之栅格瓦片地图服务:WMTS(WebMapTileService,网络地图瓦片服务)、TMS(TileMapService,瓦片地图服务)和XYZ
2024-01-11 15:53:30
6795
1
原创 Unreal引擎自带的有用的工具函数和小Tips,持续更新中
2、计算FMeshDescription的切线、法线和简单UV等的函数。3、通过耳切法计算2D、3D多边形顶点索引。1、计算三角形法线、面积等的函数。
2023-11-21 13:42:41
356
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人