当前位置: 首页 > news >正文

UE5中使用UTexture2D进行纹理绘制

在UE中有时需要在CPU阶段操作像素,生成纹理贴图等,此时可以通过UTexture2D来进行处理,例子如下:
在这里插入图片描述

1.CPP部分

首先创建一个蓝图函数库,将UTexture2D的绘制逻辑封装成单个函数:
.h:

#include "CoreMinimal.h"
#include "Engine/Texture2D.h"
#include "Engine/Texture.h"
#include "Kismet/BlueprintFunctionLibrary.h"
#include "MyBlueprintFunctionLibrary.generated.h"UCLASS()
class MYPROJECT_API UMyBlueprintFunctionLibrary : public UBlueprintFunctionLibrary
{GENERATED_BODY()UFUNCTION(BlueprintCallable, Category = "Texture")static UTexture2D* GenTexture(int32 Width, int32 Height);
};

.cpp:

#include "MyBlueprintFunctionLibrary.h"UTexture2D* UMyBlueprintFunctionLibrary::GenTexture(int32 Width, int32 Height)
{// 创建临时纹理UTexture2D* NewTexture = UTexture2D::CreateTransient(Width, Height);// 配置纹理NewTexture->MipGenSettings = TMGS_NoMipmaps;NewTexture->CompressionSettings = TC_VectorDisplacementmap;NewTexture->SRGB = false;// 锁定纹理数据进行写入FTexture2DMipMap& Mip = NewTexture->PlatformData->Mips[0];void* TextureData = Mip.BulkData.Lock(LOCK_READ_WRITE);// 设置三角形的大小int32 TriangleSize = Width / 10;  // 每个三角形的宽度和高度// 设置默认颜色FColor* FormattedImageData = static_cast<FColor*>(TextureData);for (int32 y = 0; y < Height; ++y){for (int32 x = 0; x < Width; ++x){int32 LocalX = x % TriangleSize;int32 LocalY = y % TriangleSize;// 判断像素是否在当前三角形内if (LocalX >= LocalY)  // 这里绘制一个局部的三角形{FormattedImageData[x + y * Width] = FColor::Red; // 三角形内部像素}else{FormattedImageData[x + y * Width] = FColor::Black; // 背景色}}}// 解锁纹理数据Mip.BulkData.Unlock();NewTexture->UpdateResource();return NewTexture;
}

需要修改build.cs添加模块引用:

PCHUsage = PCHUsageMode.UseExplicitOrSharedPCHs;PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "InputCore", "EnhancedInput", "RenderCore", "RHI", "ProceduralMeshComponent" });

2.蓝图部分

新建材质球暴露材质参数img1:
在这里插入图片描述
创建Actor类型蓝图,添加一个Mesh类组件,这里添加一个Cube:
在这里插入图片描述
使用刚刚的GenTexture节点创建材质纹理,运行后即可查看效果。


https://dev.epicgames.com/documentation/en-us/unreal-engine/API/Runtime/Engine/Engine/UTexture2D

相关文章:

UE5中使用UTexture2D进行纹理绘制

在UE中有时需要在CPU阶段操作像素&#xff0c;生成纹理贴图等&#xff0c;此时可以通过UTexture2D来进行处理&#xff0c;例子如下&#xff1a; 1.CPP部分 首先创建一个蓝图函数库&#xff0c;将UTexture2D的绘制逻辑封装成单个函数&#xff1a; .h&#xff1a; #include &…...

Matlab simulink建模与仿真 第十六章(用户定义函数库)

参考视频&#xff1a;simulink1.1simulink简介_哔哩哔哩_bilibili 一、用户定义函数库中的模块概览 注&#xff1a;MATLAB版本不同&#xff0c;可能有些模块也会有差异&#xff0c;但大体上区别是不大的。 二、Fcn/Matlab Fcn模块 1、Fcn模块 双击Fcn模块&#xff0c;在对话…...

每天练打字2:今日状况——完成击键5第1遍,赛文速度74.71

今日跟打&#xff1a;604字 总跟打&#xff1a;99883字 记录天数&#xff1a;2435天 &#xff08;实际没有这么多天&#xff0c;这个是注册账号的天数&#xff09; 平均每天&#xff1a;41字 练习常用单字中500&#xff0c;击键5&#xff0c;键准100%&#xff0c;两遍。&#x…...

给新人的python笔记(一)

元组与列表 元组使用圆括号&#xff08;&#xff09;而不是[]列表的元素可以修改&#xff0c;但元组的元素不能修改 创建元组 menu1 (meat,fish,chicken) 访问元组 print(menu[1:3]) 修改元组 不支持 元组内置函数 len(tuple)&#xff1a;计算元组中元素个数&#xff1b…...

如何实现异步并发限制

如何实现异步并发限制 文章目录 如何实现异步并发限制方法1注意点 方法2题目要求实现方法注意点 之前一直没有系统的去总结异步并发限制的实现思路&#xff0c;今天就来做个总结吧 方法1 只有一个变量 pool&#xff1a;代表正在执行中的任务中的集合 function sleep(name, t…...

孙怡带你深度学习(2)--PyTorch框架认识

文章目录 PyTorch框架认识1. Tensor张量定义与特性创建方式 2. 下载数据集下载测试展现下载内容 3. 创建DataLoader&#xff08;数据加载器&#xff09;4. 选择处理器5. 神经网络模型构建模型 6. 训练数据训练集数据测试集数据 7. 提高模型学习率 总结 PyTorch框架认识 PyTorc…...

如何在Android上实现RTSP服务器

技术背景 在Android上实现RTSP服务器确实是一个不太常见的需求&#xff0c;因为Android平台主要是为客户端应用设计的。在一些内网场景下&#xff0c;我们更希望把安卓终端或开发板&#xff0c;作为一个IPC&#xff08;网络摄像机&#xff09;一样&#xff0c;对外提供个拉流的…...

代理导致的git错误

问题&#xff1a; 今天在clone时出现如下错误&#xff1a; fatal: unable to access https://github.com/NirDiamant/RAG_Techniques.git/: Failed to connect to 127.0.0.1 port 10089 after 2065 ms: Couldnt connect to server真是让人感到奇怪&#xff01;就在前天&#…...

Ready Go

本文首发在这里 温馨提示 XX年&#xff0c;指的是20XX年&#xff0c;后跟以前、以后之类&#xff0c;均包含本数链接较多&#xff0c;只是想言之有物&#xff0c;已拒绝相同外链&#xff0c;仅看关心的即可已尽量只引用自己的东西&#xff0c;16年后仓库(11/13)&#xff0c;2…...

Matlab simulink建模与仿真 第十三章(信号通路库)

参考视频&#xff1a;simulink1.1simulink简介_哔哩哔哩_bilibili 一、信号通路库中的模块概览 1、信号通路组 注&#xff1a;部分模块在第二章中有介绍&#xff0c;本章不再赘述。 2、信号存储和访问组 二、总线分配模块 Bus Assignment模块接受总线作为输入&#xff0c;并…...

Java中接口和抽象类的区别(语法层面的区别、设计理念层面的区别)

文章目录 1. 语法层面的区别1.1 成员属性1.2 成员方法1.3 关系 2. 设计理念层面的区别&#xff08;重点&#xff09;3. 举例理解抽象类和接口在设计理念层面的区别3.1 例一&#xff1a;门和警报3.2 例二&#xff1a;招聘3.3 例三&#xff1a;装修房子 4. 总结 1. 语法层面的区别…...

Leetcode面试经典150题-20.有效的括号

给定一个只包括 (&#xff0c;)&#xff0c;{&#xff0c;}&#xff0c;[&#xff0c;] 的字符串 s &#xff0c;判断字符串是否有效。 有效字符串需满足&#xff1a; 左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。每个右括号都有一个对应的相同类型的左括…...

Git常用指令大全详解

Git常用指令大全详解 Git&#xff0c;作为目前最流行的分布式版本控制系统&#xff0c;其强大的功能和灵活性为开发者提供了极大的便利。无论是个人项目还是团队协作&#xff0c;Git都扮演着不可或缺的角色。本文将详细总结Git的常用指令&#xff0c;帮助大家更好地掌握这一工…...

面试真题-TCP的三次握手

TCP的基础知识 TCP头部 面试题&#xff1a;TCP的头部是多大&#xff1f; TCP&#xff08;传输控制协议&#xff09;的头部通常是固定的20个字节长&#xff0c;但是根据TCP选项&#xff08;Options&#xff09;的不同&#xff0c;这个长度可以扩展。TCP头部包含了许多关键的字…...

LabVIEW多语言支持优化

遇到的LabVIEW多语言支持问题&#xff0c;特别是德文显示乱码以及系统区域设置导致的异常&#xff0c;可能是由编码问题或区域设置不匹配引起的。以下是一些可能的原因及解决方案&#xff1a; 问题原因&#xff1a; 编码问题&#xff1a;LabVIEW内部使用UTF-8编码&#xff0c;但…...

身份证阅读器API模式 VUE Dorado7

VUE 新框架 // 身份证扫描 readIdCard(type) {// 1.连接axios.get(http://localhost:19196/openDevice).then(res > {if (res.data.resultFlag 0) {// 2.读卡axios.get(http://localhost:19196/readCard).then((res) > {if (res.data.resultFlag 0) {// this.$message…...

北京通州自闭症学校推荐:打造和谐学习氛围,助力孩子成长

在北京通州&#xff0c;寻找一所能够全面关注自闭症儿童成长、提供高效康复服务的学校&#xff0c;星贝育园无疑是众多家庭的首选。作为全国知名的广泛性发育障碍全托寄宿制儿童康复训练机构&#xff0c;星贝育园以其专业的康复方法、强大的师资力量和贴心的服务&#xff0c;为…...

openstack之cinder介绍

概念 cinder 为虚拟机提供管理块存储服务。支持的文件系统&#xff1a;lvm、iscsi、nfs、san、RBD 组件构成及功能介绍 cinder api&#xff1a;在控制节点运行&#xff0c;管理服务的接口&#xff0c;被命令行、其他组件调用&#xff1b; cinder scheduler&#xff1a;类似n…...

第k个排列 - 华为OD统一考试(E卷)

2024华为OD机试&#xff08;E卷D卷C卷&#xff09;最新题库【超值优惠】Java/Python/C合集 题目描述 给定参数n&#xff0c;从1到n会有n个整数:1,2,3,.,n&#xff0c;这n个数字共有 n!种排列。按大小顺序升序列出所有排列情况&#xff0c;并-一标记&#xff0c;当n3时,所有排列…...

清理C盘缓存,电脑缓存清理怎么一键删除,操作简单的教程

清理C盘缓存是维护电脑性能、释放磁盘空间的重要步骤。以下是一个详细且操作简单的教程&#xff0c;旨在帮助用户通过一键或几步操作完成C盘缓存的清理。 1.使用Windows系统自带工具 磁盘清理 1.打开磁盘清理工具&#xff1a; -按下“WinE”打开文件资源管理器…...

Stitches API完全指南:从基础配置到自定义扩展

Stitches API完全指南&#xff1a;从基础配置到自定义扩展 【免费下载链接】stitches HTML5 Sprite Sheet Generator 项目地址: https://gitcode.com/gh_mirrors/sti/stitches Stitches是一款强大的HTML5 Sprite Sheet Generator&#xff0c;它提供了直观的API接口&…...

保姆级教程:在ROS2 Humble/Foxy的Gazebo中配置RGB-D相机(附解决点云颜色/坐标问题)

ROS2 Humble/Foxy中Gazebo深度相机仿真全攻略&#xff1a;从配置到点云问题解决在机器人仿真开发中&#xff0c;深度相机&#xff08;RGB-D&#xff09;是不可或缺的传感器之一。它能够同时提供彩色图像和深度信息&#xff0c;为SLAM、物体识别、避障等任务提供关键数据支持。本…...

从理论推导到代码实现:手把手教你用Python/Numpy写出守恒形式的NS方程求解器

从理论推导到代码实现&#xff1a;手把手教你用Python/Numpy写出守恒形式的NS方程求解器计算流体力学&#xff08;CFD&#xff09;的魅力在于它将抽象的数学方程转化为可执行的代码&#xff0c;让流体运动的奥秘在计算机中重现。对于已经掌握流体力学理论的中高级学习者来说&am…...

从多路复用到三维光阵:Arduino驱动8x8x8 LED立方体全解析

1. 项目概述&#xff1a;用Arduino点亮一个三维世界几年前&#xff0c;我第一次在创客展上看到一个8x8x8的LED立方体&#xff0c;那种由数百个光点构成的、在三维空间中流动的动画效果&#xff0c;瞬间就把我吸引住了。它不像普通的平面LED屏&#xff0c;而是真正有“深度”的光…...

OpenClaw用户如何快速接入Taotoken并开始Agent工作流

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 OpenClaw用户如何快速接入Taotoken并开始Agent工作流 对于使用OpenClaw框架构建AI智能体的开发者而言&#xff0c;快速接入稳定、多…...

从游戏引擎到仿真平台:手把手教你用AirSim+UE4搭建你的第一个无人机/自动驾驶仿真环境

从游戏引擎到仿真平台&#xff1a;构建AirSimUE4无人机与自动驾驶仿真环境实战指南当游戏引擎遇上机器人算法测试&#xff0c;会碰撞出怎样的火花&#xff1f;微软开源的AirSim项目将虚幻引擎&#xff08;Unreal Engine&#xff09;从游戏开发领域引入到自动驾驶和无人机研究的…...

styled-theming 性能优化:如何避免主题切换时的性能瓶颈

styled-theming 性能优化&#xff1a;如何避免主题切换时的性能瓶颈 【免费下载链接】styled-theming Create themes for your app using styled-components 项目地址: https://gitcode.com/gh_mirrors/st/styled-theming styled-theming 是一个专为 styled-components …...

深度解析:JetBrains IDE试用期重置机制的技术实现

深度解析&#xff1a;JetBrains IDE试用期重置机制的技术实现 【免费下载链接】ide-eval-resetter 项目地址: https://gitcode.com/gh_mirrors/id/ide-eval-resetter 在软件开发工作流中&#xff0c;JetBrains IDE试用期管理是一个常见的技术挑战&#xff0c;尤其是在多…...

机器学习的最佳实践:这7个原则让你的模型更稳定

对于软件测试从业者而言&#xff0c;机器学习技术正在快速融入测试流程&#xff1a;从自动化测试用例生成、缺陷预测到测试环境异常检测&#xff0c;机器学习模型的稳定性直接决定了测试结果的可靠性——如果模型在测试环境波动、输入数据变化时性能骤降&#xff0c;不仅无法提…...

Claude Code用户告别封号与Token焦虑,无缝切换至Taotoken平台

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 Claude Code用户告别封号与Token焦虑&#xff0c;无缝切换至Taotoken平台 对于依赖Claude Code进行编程辅助的开发者而言&#xff…...