Unreal Engine 4 渲染目标(Render Target)教程 之 使用渲染目标绘制(下)
本文是《Unreal Engine 4 渲染目标(Render Target)教程之 使用渲染目标绘制》的下半部分,上半部分请见《Unreal Engine 4 渲染目标(Render Target)教程之 使用渲染目标绘制(上)》
作者|Tommy Tran Jun 18 2018 | 翻译 开发游戏的老王
文章目录
- 用笔刷在渲染目标上绘制
- 摄像机射线检测
- 修改笔刷大小
- 修改笔刷纹理
用笔刷在渲染目标上绘制
创建新的函数并命名为DrawBrush。首先,为笔刷纹理、笔刷大小以及绘制位置设置参数:
- BrushTexture: 类型Texture 2D
- BrushSize: 类型float
- DrawLocation: 类型Vector 2D
在用笔刷绘制之前,实现如下连接,一定把Parameter Name设为BrushTexture:
接下来,创建如下高亮节点,就可以在渲染目标上绘制了:
Begin Draw Canvas to Render Target节点会告知引擎我们要在某个渲染目标上开始绘制了。 Draw Material允许我们以指定的位置、大小和旋转来绘制材质。
计算绘制的位置需要两个步骤。首先,我们需要缩放DrawLocation来适应渲染目标的分辨率。将DrawLocation乘以Size就可以了:
默认情况下,引擎以左上角为原点绘制材质,这使得笔刷纹理就不在目标位置的中央了。所以,我们得把BrushSize除以2,然后从先前的步骤中减去这个结果:
接下来,完成如下链接:
最后,我们得告诉引擎什么时候结束绘制。按如下连接添加End Draw Canvas to Render Target 节点:
这样,只要调用DrawBrush,它就会先为BrushMaterial 设定指定的纹理,然后将BrushMaterial按指定的位置和大小绘制到RenderTarget上。
以上就是绘制函数。点击编译然后关闭BP_Canvas。下面就该实现从摄像机发出射线,并且当射线和平面发生碰撞就绘制的功能了。
摄像机射线检测
绘制到画布之前,我们要先指定笔刷纹理和大小。在Blueprints文件夹中打开BP_Player。然后将BrushTexture设为T_Brush_01并将BrushSize设为500。本例中笔刷纹理被设为猴子图片,大小为500×500像素。
接下来,进行射线检测。定位到InputAxis Paint节点并创建如下连接:
于是,只要玩家按下Paint事件的绑定按键(本例中为鼠标左键),射线就会沿摄像机的前方向检测了。
接下来我们要检查射线是否碰到了画布。添加如下节点:
这样,如果射线碰到了画布,DrawBrush函数就会以给定的笔刷参数和UV坐标执行。
想让Find Collision UV正常工作,我们得做两个设置。在LineTraceByChannel节点上开启Trace Complex。
接下来Edit\Project Settings→Engine\Physics开启Support UV From Hit Results,然后重启项目。
重启完毕,点击Play然后按住左键就开始绘制了。
我们甚至可以创建多个画布并且分别绘制。因为每个画布都可以动态为自己创建渲染目标。
在下面的章节,我们将实现让玩家修改笔刷大小得功能。
修改笔刷大小
打开BP_Player定位到InputAxis ChangeBrushSize节点。这个轴事件(Axis)被绑定到了鼠标滚轮上。要修改笔刷大小,只需要让BrushSize的值依赖Axis Value就可以了。如下图创建连接:
每次玩家使用鼠标滚轮BrushSize都会增加或减少。上图的乘法节点会决定加/减的速度。为了安全度量,我们使用了一个Clamp (float) 来确保笔刷大小在0到1000之间。
点击编译并回到主编辑器。使用鼠标滚轮调整一下笔刷大小。
最后的章节,我们将实现玩家修改笔刷纹理的功能。
修改笔刷纹理
首先,我们需要一个数组来存储玩家可选的纹理列表。打开BP_Player然后创建一个array变量,将其类型设为Texture 2D并命名为Textures。
在Textures中添加3个元素。并分别设置为:
- T_Brush_01
- T_Brush_02
- T_Brush_03
这几个都是玩家可选的纹理,想要更多的纹理只需要把它们添加到数组就可以了。
接下来,我们需要一个变量来存储数组索引。创建一个整型变量并命名为CurrentTextureIndex。
接下来,我们需要一种循环选择纹理的方法。本教程中,我们在输入设置中将右键点击设为NextTexture。玩家按下这个按键,就会切换到下一个纹理。定位到InputAction NextTexture节点创建如下连接:
这样每次点击右键CurrentTextureIndex 都会加1.如果索引到头了,就会被重置为0.最终BrushTexture会被设置为对应的纹理。
点击编译并关闭BP_Player。点击Play并按下鼠标右键就可以循环选择纹理了。
Unreal Engine 4 渲染目标(Render Target)教程 之 使用渲染目标绘制(下)相关推荐
- 【学习笔记】Unreal Engine 4 虚幻引擎蓝图中级教程物理碰撞教程
教程链接:Unreal Engine 4 虚幻引擎蓝图中级教程物理碰撞 想共享的小伙伴可以E-mail我:lxbcolorgalaxy@qq.com 目录 第一章 常见的物理现象及分析 1蓝图模板中的 ...
- ArcGIS Maps SDK for Unreal Engine通过UI方式显示地图教程
前言 一个 UE 项目,可以包括多个关卡(level),关卡可以在菜单栏中新建(文件->新建关卡). 使用快捷键 Ctrl+S 可以保存当前关卡,你可以保存到上面提到的演示文件放置的位置,你可以 ...
- Unreal Engine 4(UE4)下载教程
首先登陆到UE官方网站https://www.unrealengine.com 下载EpicGamesLauncherInstaller-2.1.3-2533468.msi文件 按照提示进行安装 如 ...
- pyecharts源码解读(10)渲染包render之templates目录:渲染模板
当前pyecharts版本为1.9.0 概述 render包结构 render包位于pyecharts包顶级目录中,用于渲染图表.render包结构如下: ├─render # 渲染设置包 │ │ d ...
- 深度学习和目标检测系列教程 19-300:关于目标检测AP、IoU和mAP简介
@Author:Runsen R-CNN 和YOLO等对象检测模型,使用了平均精度 (mAP).mAP 将真实边界框与检测到的框进行比较并返回分数.分数越高,模型的检测就越准确. Precision ...
- 什么是渲染目标(render target) 渲染到纹理(Render To Texture, RTT)详解
渲染到纹理(Render To Texture, RTT)详解 RTT是现在很多特效里面都会用到的一项很基本的技术,实现起来很简单,也很重要.但是让人不解的是网上搜索了半天只找到很少的文章说这个事儿, ...
- UNREAL ENGINE 4.13 正式发布!
这次的版本带来了数百个虚幻引擎 4 的更新,包括来自 GitHub 的社区成员们提交的 145 个改进!感谢所有为虚幻引擎 4 添砖加瓦贡献的人们: alk3ovation, Allegorithmi ...
- keyshot渲染图文教程_KeyShot渲染教程,KeyShot渲染基础教程步骤图文详解
KeyShot渲染教程,KeyShot渲染基础教程步骤图文详解 KeyShot渲染教程,在我们导入了项目之后,接着我们就要输出图片或者动画了.这里有许多动态的方式来完成,在开始渲染之前,我们来设置我们 ...
- Vue3官网-可复用组合式API(十四)实例 property(\$slots,\$attrs)、渲染函数render(虚拟节点VNode,h() 参数,使用JavaScript代替模板功能),插件
Vue3官网-可复用&组合式API(十四)实例 property($slots,$attrs).渲染函数render(虚拟节点VNode,h() 参数,使用JavaScript代替模板功能), ...
最新文章
- pip: command not found 一系列报错
- 理论塔板数 matlab,matlab作图法计算精馏理论板数
- 公司的个性制度与团队精神
- 数据结构与算法实验题 4.2 Who is the strongest
- 三菱GXWorks2 绘制梯形图
- android 连接电视,手机连接电视方法大全
- 安卓6.0获取相机权限
- linux c语言 修改mac地址,C语言根据MAC地址查找网卡并修改IP地址
- Mysql数据库——高阶语句(上)
- win10系统安装到服务器失败怎么回事,U盘安装win10系统失败,提示Windows无法安装怎么办...
- matlab动态图阿基米德螺旋,魔兽世界M基尔加丹阿基米德螺旋线之Matlab动图!国服加油...
- Single-stage目标检测网络YOLO相关背景知识
- 【模型评价指标】分析模型评价常用指标
- HTML一键打包APK工具_安卓app封装_H5打包安卓APP
- 线性代数【7】 向量和线性相关性
- 有趣的汉语:同音文(二):《施氏食狮史》
- 企业6S现场管理推行成功的关键
- php阿拉伯数字转汉字,php 阿拉伯数字转中文汉字
- 关于Flurry的一些用法
- 信息系统项目管理师(2022年)—— 重点内容:项目成本管理(7)
热门文章
- rook 排错记录 + Orphaned pod found kube-controller-manager的日志输出
- 使用wait函数获取子进程终止状态
- 【SPRD CAMERA】1 HAL层初始化流程
- 复旦非全日制研究生计算机,信息整合!复旦大学非全日制研究生招生详情
- 内网渗透测试:域内权限维持思路总结
- USB3014-应用程序开发
- CSS选择器 :first-of-type/:last-of-type/ :first-child/:last-child 用法
- ctc center-loss在字符识别形近字分类中的使用
- 知识图谱学习资料汇总
- 安霸Ambarella CV系列芯片