UE4中实现Cesium 3dtileset的压平

实现思路:修改3dtileset中的顶点的高度值。

1、ue4的cesium插件中是通过UCesiumGltfComponent中来加载的。具体通过static void loadModelGameThreadPart( UCesiumGltfComponent* pGltf, LoadModelResult& loadResult, const glm::dmat4x4& cesiumToUnrealTransform) 这个函数来加载。在这里面会将每个tile通过对应的转换矩阵实现cesium中的位置转到ue中的位置。

  pMesh->HighPrecisionNodeTransform = loadResult.transform;
  pMesh->UpdateTransformFromCesium(cesiumToUnrealTransform);

2、 获取staticmesh中所有的顶点信息。

FPositionVertexBuffer& posBuffer = pStaticMesh->RenderData->LODResources[0].VertexBuffers.PositionVertexBuffer;

通过ion转换的模型,gltf的默认朝上的轴是Y轴,通过cc导出的3dtileset朝上的轴是Z轴。所以需要判断下朝上的轴是哪个。然后去修改对应轴的值。

3、计算需要修改的高度值

通过上面1中提交的方法,获取到cesium中坐标转换到ue中的坐标的转换矩阵。绘制一个范围,获取这个范围中的高度的最小值。根据范围,高度值来创建一个点,并获取到这个点在cesium中的位置。

FVector  inverseLoca = inverse.TransformFVector4(FVector(_polygon.west,_polygon.south,_polygon.height));

最后将需要修改的顶点的高度值改为inverseLoca的高度值即可。

问题:1、这样修改完之后会闪面,没有太好的解决办法。

2、压平范围限制只能使用矩形,多边形的范围判定会很卡,应该是我使用算法的原因。如果能将范围判定放到显卡中计算就好了。但现在不会。。。。

  • 7
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值