首页 > 其他分享 >UE5 RenderTexture鼠标点选

UE5 RenderTexture鼠标点选

时间:2023-11-14 16:00:50浏览次数:35  
标签:点选 RenderTexture 鼠标 渲染 Image 纹理 坐标 UE5 RenderTarget

好久没有记录了,大家好,今天分享一个最近解决的UE方面的功能

情景:
把3维物体渲染到纹理,并在umg中使用Image控件显示纹理。此外还支持鼠标在Image上点击时,选中纹理上对应位置的物体。

思路理解:
在空间中某点某方向,以某视场角观察3维场景,并把画面渲染到纹理上。
在UMG的Image控件显示该纹理,Image以某位置、某尺寸摆放在屏幕上。(这暗示着RenderTexture和Image可能有不同的尺寸和宽高比,但是把它们规范化到0-1就能很好的对应起来)
当鼠标点击时,计算出鼠标位置相对于Image的位置,进而计算出在RenderTexture上的位置,进而计算出在世界坐标系的方向,然后就可以光线投射了。

涉及的技术点:
1、3维物体渲染到纹理。使用UE自带的 USceneCaptureComponent2D 可以做到,和Unity的摆放一个Camera然后设置RenderTexture类似。
2、坐标转换:鼠标在屏幕上的坐标->渲染相机的投影面坐标->世界空间坐标。
3、Trace,也叫Raycast。用上一步计算得到的鼠标点击位置在世界空间中的方向进行光线投射,获取命中的物体。

USceneCaptureComponent2D
这个是专门用来完成渲染到纹理的组件,我们可以创建RenderTarget资产,然后赋值给它的TextureTarget字段,就可以把画面渲染到我们指定的RenderTarget中。
它可以指定 Primitive Render Mode 为 PRM_UseShowOnlyList,这种模式只会渲染列表 ShowOnlyActors 中的Actor。
另外它有各种Show Flags可以控制是否渲染某些特性。
例如想渲染透明背景的话,需取消选择 Atmosphere \ Cloud \ Fog \ Landscape
还有一点值得说的是 Capture Source 属性,它控制写入RenderTarget中的数据的格式,如果是要渲染透明背景的话,选择 SceneColor (HDR) in RGB, Inv Opacity in A的模式,以拿到透明度数据。
提醒:有一个Actor类型叫ASceneCapture2D可以直接在关卡使用,它基本等于Actor + USceneCaptureComponent2D。为了后续使用现成的库函数,推荐直接用它。

Image
Image没有太多可说的,它既可以直接使用RenderTarget,也可以使用材质球。如果按上述的透明背景的设置的话,这时候就需要一个材质球把透明度反向处理一下,因为上面的 Inv Opacity in A,所以需要在材质中1-A才是正常的透明度。
例如:

坐标转换
这里方法是把鼠标位置和Image的矩形框都变换到UMG视口中进行计算。涉及到几个现成的函数:
GetMousePositionOnViewport 获取鼠标在UMG视口中的坐标
GetCachedGeometry 获取UMG Wedget的几何体
LocalToViewport 从Wedget几何体的局部坐标变换到UMG视口坐标中
DeprojectSceneCaptureToWorld 把RenderTarget的uv坐标反投影到世界坐标系中的点和方向。这个函数就需要ASceneCapture2D为参数,因此上面推荐直接用ASceneCapture2D。

光线投射
用Trace系列的函数就可以了,例如使用 LineTraceSingle 查找第一个碰到的Actor

标签:点选,RenderTexture,鼠标,渲染,Image,纹理,坐标,UE5,RenderTarget
From: https://www.cnblogs.com/axun1992/p/17831831.html

相关文章

  • UE5 多人联机 - 网络复制相关概念理解
    相关概念理解:参考视频:[搬运][中文字幕]虚幻引擎中的多人联机:如何理解网络复制    ......
  • UE5: 探究Actor Tick的注册与执行
    1.前情提要因工作需要,有在编辑器模式下执行Actor的Tick函数的需求。经过查阅资料,了解到重载Actor::ShouldTickIfViewportOnly函数可以实现在编辑器视口下也可以执行Tick函数。已知Actor和ActorComponent都有自己的Tick函数,并且进入游戏并执行BeginPlay后才会开始Tick。出于好......
  • UE5打包后,无法切换关卡的问题
    首先是普通的会遇到的问题,比如多个Level不在同一目录,或者不在默认的Maps目录打包不成功这时候要设置,ProjectSettings->Packaging上面保证没问题之后,打包发现依然有问题,不管切换路径为相对或者绝对路径都不行把蓝图中的OpenLevel,变为按引用传递可以了,详细请看如下:https://www......
  • 游戏开发进行中UE5引擎打不开后续
    游戏每次启动都有个问题:  之前我实现了插件里的接口,但是已启动,关于接口这一块的就消失了,有些函数还在但是却是自定义事件,不是接口里的,ClassSettings里面也提了  然后我把他改成了新的character class,然后在c++的接口新增一个函数,然后无法编译:   无法编译的报错......
  • UE5 怎么快速查找 UI 是哪个蓝图?
    通过“工具”->"调试"->"控件反射器"官方文档:https://docs.unrealengine.com/5.1/zh-CN/using-the-slate-widget-reflector-in-unreal-engine/......
  • UE5 Common UI
    1.教程(需FQ)   IntroductiontoCommonUI|InsideUnreal 2.与UMG区别CommonActivatableWidgetStack同一个栈中的窗口一个激活时,其他的可以自动隐藏。通过 PushWidget<CommonActivatableWidget>()函数,可以激活指定类型的窗口。CommonActivatableWidget激活/取消......
  • UE5.1 One or more errors occurred. (Found no script module records.)
    问题UE5.1源码版本烘培资源,提示缺少SDK,通过日志查看,错误打印如下:Unhandledexception:Oneormoreerrorsoccurred.(Foundnoscriptmodulerecords.)UATHelper:正在安装Sdk(Windows):Initializingscriptmodules...UATHelper:正在安装Sdk(Windows):Unhandledexceptio......
  • UE5 substrate flake normal map 亚克力
    前言本篇将运用UE5的substrate系统制作一个亚克力圆盘效果如下FlakeNormalMap上图中圆盘内的彩色小点是通过噪声函数flake(个人翻译为薄片)normalmap生成的,该函数基于[CellularNoise]https://www.cnblogs.com/chenglixue/p/17742395.html用途:汽车喷漆,及各种细小的......
  • UE5 blend normal map的四种方式
    前言很多情况下玩家靠近物体想看看物体的细节纹理,如果仅仅使用basenormalmaps不会给予玩家好的观感,此时就需要用到detailnormalmaps。也就是说,当玩家靠近物体的,物体的法线将更偏向于detailnormalmaps,更准确地说是detailnormalmaps和normalmap的blend。本篇将介绍blend......
  • UE5 Substrate SSS
    前言本文将介绍如何使用UE5的新的材质系统——Substrate来制作次表面反射效果关于Substrate不懂得可以看这https://www.cnblogs.com/chenglixue/p/17418887.html玉初次实现在Substrate中,Albedo用于表示光线散射后的颜色。在这里我设为绿色SSSMFP控制的是长中短波长......