UE4 Actor的自定义渲染

在UE4的4.24.3版本中,自定义Actor渲染涉及创建Actor、UPrimitiveComponent,并重写CreateSceneProxy以创建FPrimitiveSceneProxy。CreateRenderState_Concurrent用于渲染状态更新,而SendRenderDynamicData_Concurrent处理渲染数据更新。关键在于FPrimitiveSceneProxy的实现,通过GetDynamicMeshElements和DrawStaticElements将自定义数据提交给渲染器。此外,需要定义自定义数据结构体来存储和传递渲染信息。
摘要由CSDN通过智能技术生成

版本4.24.3

1.创建一个Actor

UCLASS()
class MY_API AMyActor : public AActor
{
	GENERATED_UCLASS_BODY()

	UPROPERTY()
	class UMyRenderingComponent * MyRenderingComponent;
};

 

2.创建一个UPrimitiveComponent 组件,这个组件是游戏线程渲染组件

UCLASS()
class MY_API UMyRenderingComponent : public UPrimitiveComponent
{
	 GENERATED_BODY()
public:

	//~ Begin UActorComponent Interface.
	virtual void CreateRenderState_Concurrent() override;
	virtual void SendRenderDynamicData_Concurrent() override;
	//~ End UActorComponent Interface.

	//~ Begin UPrimitiveComponent Interface
	virtual FPrimitiveSceneProxy* CreateSceneProxy() override;
	//~ End UPrimitiveComponent Interface.

	//~ Begin USceneComponent Interface
	 virtual FBoxSphereBounds CalcBounds(const FTransform& LocalToWorld) const override;
	//~ End USceneComponent Interface

};

一定要重写的是CreateSceneProxy函数,因为这是创建FPrimitiveSceneProxy的地方。FPrimitiveSceneProxy是网格体渲染管道的开端,是游戏线程对渲染控制的末端,剩下的渲染都是渲染线程的工作。

 

CreateRenderState_Concurrent是渲染状态更新会调用的函数,当渲染状态更新需要做操作时可以重载该函数。MarkRenderStateDirty函数表示更新渲染状态。

CreateSceneProxy和CreateRenderState_Concurrent的关系堆栈

从这个堆栈可以看出,CreateScneProxy是UPrimitiveComponent里GetWorld()->Scene->AddPrimitive(this)函数调用的。

 

SendRenderDynamicData_Concurrent是渲染数据更新会调用的函数,当渲染数据更新需要做操作时可以重载该函数。MarkRenderDynamicDataDirty函数表示更新渲染数据。

 

3.创建一个FPrimitiveSceneProxy,这是游戏线程的“UPrimitiveComponent”渲染线程表示,通过对“GetDynamicMeshElements”和“DrawStaticEl

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值