首先,在UE蓝图中创建一个自定义节点,命名为"GetPixelColor",并设置两个输入参数:一个是纹理图片(Texture类型),另一个是坐标(Vector2D类型)。同时,设置一个输出参数为颜色(Color类型)。

接着,打开Visual Studio,创建一个新的C++类,继承于UE的UBlueprintFunctionLibrary类,命名为"GetPixelColorLibrary"。在头文件中,声明一个静态函数,用于实现获取像素颜色的功能。函数的参数与上一步中的输入参数对应。函数返回值为FLinearColor类型,表示颜色信息。

下面是实现函数的代码:

#include "GetPixelColorLibrary.generated.h"

UCLASS() class UGetPixelColorLibrary : public UBlueprintFunctionLibrary { GENERATED_BODY()

public: UFUNCTION(BlueprintPure, Category = "Utility") static FLinearColor GetPixelColor(UTexture* Texture, FVector2D Coordinate) { if (Texture == nullptr) { UE_LOG(LogTemp, Error, TEXT("Invalid texture!")); return FLinearColor::Black; }

    FTexture2DMipMap& Mip = Texture->PlatformData->Mips[0];
    uint8* Data = (uint8*)Mip.BulkData.Lock(LOCK_READ_ONLY);
    int32 Width = Mip.SizeX;
    int32 Height = Mip.SizeY;

    int32 X = FMath::RoundToInt(Coordinate.X * Width);
    int32 Y = FMath::RoundToInt(Coordinate.Y * Height);

    int32 Index = (Y * Width + X) * 4;  // 4 bytes per pixel (RGBA)

    FLinearColor Color;
    Color.R = Data[Index] / 255.f;
    Color.G = Data[Index + 1] / 255.f;
    Color.B = Data[Index + 2] / 255.f;
    Color.A = Data[Index + 3] / 255.f;

    Mip.BulkData.Unlock();

    return Color;
}

};

在函数中,首先判断输入的纹理是否有效。如果无效,输出错误信息并返回黑色。接着,获取纹理的第一个Mip图,锁定纹理数据,获取纹理的宽度和高度。计算出输入坐标对应的像素坐标,并根据像素坐标计算出对应像素的索引。根据索引获取像素的RGBA值,并将其转换为FLinearColor类型的颜色信息。最后,解锁纹理数据并返回颜色信息。

编译代码后,在UE蓝图中使用"GetPixelColor"节点调用该函数即可。将纹理图片和坐标作为输入,获取对应像素的颜色信息。

使用C++编写一个可以在UE蓝图中调用的节点功能是传入一个纹理图片根据输入的X和Y坐标在纹理图片上找到相应的像素并输出此像素的颜色信息

原文地址: http://www.cveoy.top/t/topic/bLw4 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录