虚幻4渲染编程(图元汇编篇)【第二卷:使用自己程序化生成的模型】

我专栏的目录

小IVan:专题概述及目录​zhuanlan.zhihu.com图标

本节使用的是UE4.17,如果使用4.19或以上版本的话会有一些不同。UE4.19又把这些封装了一下。从原理上为了解释清楚我还是选择了比较原始的4.17版本。后面的章节会把它改造成现在的版本。

还是先上效果吧

上篇文章分析了虚幻自带的CableComponent并且在unity中重现了CableComponent,这篇将开始着手自己进行图元汇编的编程。我们先做一个简单的,后续再慢慢做一些比较好玩的图元汇编相关的效果。

v2-f2546f9f279eca809cd37e1a0a798085_b.gif
这个GIF在网页上的表现优点奇怪,我这里看到有残影,其实是没有的哈
v2-6070db4aa860f3d8855d1910602441b7_b.jpg

首先我们先建一个新的插件

v2-6ca02c9eb3811e5c18437d27538e07f6_b.jpg

我给它命名为RayLine,你也可以给它叫个什么其他名字,然后在插件里加一个头文件和源文件

v2-543ecd422637d4007849f83eea13ceb2_b.jpg

然后在Build.cs文件里引入我们需要的模块

v2-a8966dddef89062c484c0bfddc7812dc_b.jpg

然后我们在RayBasicComponent.h中键入我们的新类型

v2-aba530ce174b0f63556c108181bf4725_b.jpg

我随便定义了一个结构体。

然后我们来定义我们的组件类型

v2-e5cb0442b1353fe4662b7777da3ae5ba_b.jpg

我们的这个类型继承自UMeshComponent,然后有一个RAYLINE_API类导出宏,这个宏的名字必须和我们模块的名字保持一致,我们的模块就是我们的插件啦。

然后我们声明了一个GENERATED_UCLASS_BODY(),这个宏会帮我们自动生成默认构造函数,我们这里如果再敲构造函数,编译器就会报错了,所以我们这里什么都不需要干,如果我们这里使用的是GENERATED_BODY()宏的话就需要写构造函数了。

然后我声明了一个变量DebugSec并给他UPROPERTY宏,这样编辑器就能认识它了,它也会被纳入垃圾回收里。

然后我们重写了virtual FPrimitiveSceneProxy* CreateSceneProxy() override函数,这个函数创建场景代理,场景代理的作用就是负责在渲染线程端把逻辑线程这边的数据压入渲染管线,下面我画个图感受一下:


v2-beca70e98f1d5ad8ba1d86ddc803084f_b.jpg

我们这里只需要管到把我们的模型加入渲染队列就可以了(红圈圈起来的部分),至于后面的事情就是引擎帮我们处理了,当然如果你不想使用引擎的渲染管线把后面一大片自己撸一套新机制出来也行。

然后来到我们的RayBasicComponent.cpp

我们先把需要的头文件包含进来

v2-8b5e1c43c08447ce1b3b2dd62542759e_b.jpg

然后定义我们的顶点缓冲区,注意这个和Shader篇的顶点着色器是两个东西哈。

v2-14200508fdba3712dbbf50184600028b_b.jpg

然后是我们的索引缓冲区

v2-a6bb97172ba8d0012ef185b3090c5d3d_b.jpg

然后是顶点输入布局

v2-5afcd6f2116a504d0f179d885c9b2997_b.jpg

然后是一个结构体,把它视作一个数据包,方便我们从逻辑层把数据们打包一起发送到渲染线程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

cpongo11

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值