向各位大佬请教一个问题:PICCOLO里面用Opengl实现加载obj三维模型有什么好的思路吗?

引擎初学者
发布于

1:PICCOLO是否支持OpenGl做渲染?

2:用OpenGl做出来的加载obj的动态链接库,PICCOLO里面能不能直接调用接口?

5
评论 5
收藏
  • Sine
    Sine
    不是大佬,如果有大佬可以指正我的错误。 关于第一个问题 在piccolo的github源码路径 Piccolo/engine/source/runtime/function/render/render_pass.cpp 里可以看到,图形API使用的是vulkan。 关于第二个问题 关于piccolo加载obj 可以查看这个 Piccolo/engine/source/runtime/function/framework/object/object.cpp 。不过如果是想放入自己的obj直接放进asset就可以了。
    6
  • 关于第一个问题,Piccolo 引擎设计了 RHI(Rendering Hardware Interface)抽象层,隔离上层应用与下层的图形接口。
    1
  • 你好呀,欢迎提问。 关于第一个问题,Piccolo 引擎设计了 RHI(Rendering Hardware Interface)抽象层,隔离上层应用与下层的图形接口。当前主流的图形 API 有 OpenGL,Vulkan,DirectX 3D,Metal 等。为了跨平台,并利用面向下一代的图形 API 特性等,Piccolo 目前使用的是 Vulkan 图形接口。Piccolo 中完全是可以用 OpenGL 做渲染的。参考 Vulkan API 的封装,实现 RHI 类的方法即可。具体见 engine\source\runtime\function\render\interface\vulkan\vulkan_rhi.h。 关于第二个问题,调用外部链接库的接口是可以的。但是得明确,你是要用外部链接库加载 obj,还是想同时使用 OpenGL 作为下层的图形 API? 如果你的动态链接库只是加载 obj 模型,并导出顶点数据提供给调用的函数,那么实现上非常简单。 如果想通过加载动态链接库的方式使用 OpenGL API,那相当于对当前 Vulkan API 的调用 hook 成对动态连接库中 OpenGL 的调用,这种实现非常繁琐。 以上,再次感谢你的提问!
    3
  • Lazy_V
    Lazy_V
    不知道回答正不正确... 我最近也在摸索多 RHI 的实现,Piccolo 目前的 RHI 只实现了 Vulkan 的版本,而且一些 RHI 的结构和枚举值实际上也是直接来自于 Vulkan,改了个名字的那种。对于 Pipeline 的实现,也是基于 Vulkan 理念的实现,管线内部,目前也是直接暴力强转 RHI 为 VulkanRHI。如果需要支持 OpenGL,需要进一步抽象 RHI 相关的 Structure 和 枚举,包括实现枚举的转义。由于 OpenGL 是一个大的状态机,和 Vulkan 的理念本质上是不同的,你对于 Pipeline 的实现也得进一步抽象,从而同时满足多个图形 API。
  • xzben
    1、piccolo 目前是没有做完全的多后端api (Vulkan、OpenGl 等) 2、obj 加载和 opengl vulkan 等后端都是没关系的,obj 可以选择任何加载库,比如 tiny_obj_loader assimp 等,这些库最终都是加载出模型的 vertex , index、normal 、color、uv 等数据的。 然后再通过这些数据创建 gpu buffer 传递给 渲染后端渲染出模型的。
    1