计算映射模型UV

uv就是三维模型的Vertices坐标投影在平面上的坐标。所以重新计算UV就有了简单的思路。
(1)模型计算uv时都会丢弃一个轴向的数值,把他当作模型映射uv的法线方向,
(2)然后再考虑剩下的二个维度的值通过缩放和偏移重新计算生成三维模型相应的uv坐标。具体算法就是
1.将所有的vertices坐标都依次去掉一个轴向的值。
2.将vertices中的最后一个点坐标作为参考点,其他的点坐标分别依次计算剩下的点坐标与参考点的偏移作为此点的uv值。
比如参考点的坐标为O(x1 =0,y1=0),另一个点的坐标A(x2 =1,y2=2),那么A的uv点值为(x2-x1=1,y2-y1=2),u值等于x1到x2的偏移值 1;v值等于y1到y2的偏移值2。
3.因为uv的取值范围0~1,所以我们需要将计算后的uv的值进行缩放到0到1的范围内。之后再进行一个偏移。

直接上代码:
头文件

#pragma once
#include "CoreMinimal.h"
#include "Kismet/BlueprintFunctionLibrary.h"
#include "CalculateMeshUV.generated.h"/**
 * 
 */
UCLASS()
class HTTPREQUEST_API UCalculateMeshUV : public UBlueprintFunctionLibrary
{
   
 GENERATED_BODY()
public :
 
 UFUNCTION(BlueprintCallable,CateGory = "MyMath")
 static void CalculateUV(TArray<FVector> MeshVertices,FVector normal, TArray<FVector2D>& uv);
};
#include "CalculateMeshUV.h"
//MeshVertices 为mesh上的vertices点
//normal为 映射的方向
//返回 uv
void UCalculateMeshUV::CalculateUV(TArray<FVector> MeshVertices, FVector normal , TArray<FVector2D>& uv)
{
   
 float maxU = 0.0, minU = 0.0, maxV = 0.0 , minV = 0.0;
 for (int i = 0 ;i < MeshVertices.Num()-1;i++)
 {
   
  uv.Add(FVector2D
  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值