[引擎搭建记录] 延迟渲染管线与PBR(上)

最近我开始从头搭建游戏引擎了,打算是学习虚幻以及unity引擎的一些特性,造一个很小的轮子,不求功能完善,但求粗略地了解一下架构,以及尽可能熟悉其中一小部分系统。

github地址: https://github.com/MrySwk/GravityEngine (目前渲染部分代码乱七八糟,之后要重构一次)

图形库用的是DirectX,目前引擎已经完成了基本的界面浏览功能、延迟管线、模型加载以及PBR,效果图如下
在这里插入图片描述
在这里插入图片描述

框架选择


界面

造这么一个轮子的目的是造一个playground,以后学习什么算法的时候可以直接在这个环境下面试验,不用每次头从头做一个小框框,方便我学习引擎中的一些原理,最终目的不是做一个功能完善的可以用的东西出来,首先我想要尽可能简单的就是UI界面,这部分的选择有很多,比如

  1. QT
  2. WPF/Winform
  3. HTML5+CEF

这几个各有各的好处,因为不想在界面上面浪费时间做美工,想轻轻松松就能做的好看,那HTML其实是这里面最好的选择,因为有大量的现有的框架和样式表可以嫖,而且js写一些动态的效果比其他两个方便多了,然而不幸的是我已经很久没写js的东西了,所以这个选择的学习成本比前两个都大。

然后QT和WPF都可以做出好看的效果,QT好处是跨平台,虽然这里没啥跨平台的需求,因为引擎一般还是在win下面用,而且图形库已经选了DX了,所以基本上就是C#和C++的选择了,因为C#写的比C++舒服,不用费心费力管指针管内存,所以这里我最终选择了WPF。


前后台交互

然后现在我希望引擎内核是C++的,界面是WPF,(可能之后还会有lua或者mono做脚本),那么就涉及到了c++和c#的交互,选择有这么几种

  1. P/Invoke
  2. 用C++/CLI封一层
  3. 用C++/CX封一层

第一个是效率最高的,来回的成本最小,但是非常麻烦,中间封装的这层必须按C的标准来,C#里是不能用c++里的类的(虽然还是有办法用),然后交互的时候有很多需要注意的事情
第二个选择,C++/CLI,这个选择很好但是尝试的时候也遇到了一个小问题,那就是Microsoft::WRL和CLI里的一些东西冲突了,其实主要是dx12的示例程序里面都用的是WRL::ComPtr这个指针,貌似也是一种智能指针,我暂时没有去确认下把ComPtr全部换成智能指针会不会有别的问题,感觉这个应该不是必须的,所以把WRL相关的都去掉应该就行了,不是什么大问题,不过为什么要用Com指针而不用普通智能指针可能是有

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值