最近想写个 2D 游戏的引擎,我有很多问号。请问下如何入门基础 OpenGL, 以及不久的未来是不是 vulkan 会取代 OpenGL,想找个起点,我想明天开始补些知识 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Game Engines
Unreal Engine
MyCryENGINE
ChrisFreeMan
V2EX    游戏开发

最近想写个 2D 游戏的引擎,我有很多问号。请问下如何入门基础 OpenGL, 以及不久的未来是不是 vulkan 会取代 OpenGL,想找个起点,我想明天开始补些知识

  •  
  •   ChrisFreeMan2021-08-31 18:50:37 +08:00 5337 次点击
    这是一个创建于 1561 天前的主题,其中的信息可能已经有所发展或是发生改变。

    你们都是我大哥

    24 条回复    2021-09-01 09:01:36 +08:00
    lcdtyph
        1
    lcdtyph  
       2021-08-31 18:54:28 +08:00 via iPhone
    opengl 教程很多啊,零基础的话直接去看 learnopengl-cn.github.io 就好了。

    vulkan 建议对 gpu 硬件架构比较了解之后再学习,它的 api 太底层了,牺牲了便利性换来了自由度和渲染效率
    ChrisFreeMan
        2
    ChrisFreeMan  
    OP
       2021-08-31 18:57:41 +08:00
    @lcdtyph 好的,多谢
    ChrisFreeMan
        3
    ChrisFreeMan  
    OP
       2021-08-31 18:58:28 +08:00
    请问 openGL 未来会消亡吗,我看知乎上说,未来 OpenGL 会被 Vulkan 给取代,以及苹果都呈现放弃的姿态了。学习 OpenGL 对于过度到 Vulkan 有帮助吗,我害怕 49 年入国军
    kokutou
        4
    kokutou  
       2021-08-31 19:00:52 +08:00 via Android
    你先学个容易学的现在资料多的。。。
    流程搞懂了切过去很简单的。。。
    codehz
        5
    codehz  
       2021-08-31 19:01:19 +08:00
    2d 游戏引擎的话,现在你用啥都差不多,因为最重要的部分根本不是图形 API,还不如找个简单点的先把框架搭建起来,实在要移植也可以用 ANGLE 凑合用下
    xarthur
        6
    xarthur  
       2021-08-31 19:10:24 +08:00
    对于引擎来说重要的不是图形 API,主流的商业游戏引擎应该应该都同时支持 Metal 、DirectX 、OpenGL 、Vulkan 吧。
    ChrisFreeMan
        7
    ChrisFreeMan  
    OP
       2021-08-31 19:20:24 +08:00
    多谢各位回复,其实我是纯个人兴趣的,不是想要搞个什么商业引擎,没那么牛逼,就是想进阶一下基础图形知识。。抱歉没说清楚。我觉得我还是先自己探索一番,再来提出更有价值的问题。
    joshua7v
        8
    joshua7v  
       2021-08-31 20:08:00 +08:00 via iPhone
    图形 api 和图形学知识是两码事
    想补理论基础,建议从软件渲染(cpu)开始
    bitdepth
        9
    bitdepth  
       2021-08-31 20:12:32 +08:00 via iPad
    opengl 是不的,vulkan 其不合做用途,太,大多景有意。
    而 directx3d 支援只是而已,懂 opengl 就 directx3d 而且代 windows 平台哪不支援 opengl ?
    typetraits
        10
    typetraits  
       2021-08-31 20:16:37 +08:00   1
    基础图形知识从手撸渲染管线开始,再搞个 CPU PBR 渲染就差不多了
    我学图形学的时候根本没用过 OpenGL,一开始接触的就是 Vulkan,然后反向照着 Vulkan 接口实现了 CPU 渲染器
    我个人认为接触一下 Vulkan 是有好处的,虽然繁琐,但 Vulkan 设计上非常接近 GPU 的工作原理,可以让你在学习 API 的同时对 GPU 的工作流程有大致的了解
    Mutoo
        11
    Mutoo  
       2021-08-31 20:34:29 +08:00
    苹果已经明确宣布将从 macOS 上移除对 OpenGL 的支持,所以如果你要做跨平台的游戏的话,支持 Metal 几乎是必须的。如果自己想实现一个简单的游戏引擎的话,可以使用 bgfx 来支持跨平台渲染后端,你只要注重游戏引擎的其它部分,就行了。
    https://github.com/bkaradzic/bgfx
    Mutoo
        12
    Mutoo  
       2021-08-31 20:36:42 +08:00   1
    另外如果对跨平台渲染有兴趣的话,推荐你这个系列:
    https://marcelbraghetto.github.io/a-simple-triangle/
    ChrisFreeMan
        13
    ChrisFreeMan  
    OP
       2021-08-31 21:19:32 +08:00
    @Mutoo 看起来是干货,必须道个谢
    ChrisFreeMan
        14
    ChrisFreeMan  
    OP
       2021-08-31 21:28:24 +08:00
    多谢各位大哥的回复,我都看了,我目前不知道怎么回复你们,这对于我来说是一个未知的领域,我需要一点点了解
    frankmdong
        15
    frankmdong  
       2021-08-31 22:49:32 +08:00   1
    跟着 theCherno 写游戏引擎吧,也是先做的 2D 的功能,渲染 API 也封装了一层,一开始用的是 OpenGL,后来他在自己的 develop branch 接了 Vulkan,https://www.youtube.com/playlist?list=PLlrATfBNZ98dC-V-N3m0Go4deliWHPFwT
    这个我也跟了一大半了,跟着封装了不少渲染相关的接口,学跨平台的处理,还用 ImGUI 做了个编辑器。
    渲染流程不太熟悉的话可以先学学 OpenGL,他也有单独的 OpenGL 的系列教程。
    基础牢靠了,之后再在 Vulkan 、DirectX12 、Metal 这些新图形 API 里面挑一个学。
    levelworm
        16
    levelworm  
       2021-08-31 22:59:14 +08:00 via Android
    2D 没什么东西啊,我记得你之前不是用 c#写了一个吗?
    ChrisFreeMan
        17
    ChrisFreeMan  
    OP
       2021-08-31 23:46:58 +08:00 via iPhone
    @levelworm 那玩意用的是别人封装比较高层的框架写的,只是一个简单的关卡编辑器,很多细节的东西还是不是很了解
    levelworm
        18
    levelworm  
       2021-09-01 01:37:13 +08:00 via Android
    @ChrisFreeMan 之前建议用 C++和 sdl2 我觉得可以试试看,相对底层,封装的不是很多。如果真的想要更底层,可以看看 youtube 上有个系列是 c game programming from ground up
    levelworm
        19
    levelworm  
       2021-09-01 01:38:02 +08:00
    dtysky
        20
    dtysky  
       2021-09-01 01:41:44 +08:00
    直接上 WEBGPU,简单的很。
    GeruzoniAnsasu
        21
    GeruzoniAnsasu  
       2021-09-01 04:03:07 +08:00   4
    ………… CPU 渲染器是什么鬼提案

    他们都被 opengl 吸引了,忘记了这是个 XY Problem
    而且 2D 游戏怎么还能扯到 PBR 的


    其实游戏引擎(尤其是 2D )跟图形 API 关系没那么紧密
    2D 引擎不知道你考虑的功能有哪些,切图、变换、物理、对象管理?
    如果你想写的真的是 2D 引擎,那么考虑问题的顺序应该是 top-down 的,先计划最终能达到什么效果,然后再把每一层的抽象定好,然后在往抽象出来的框架里塞代码。

    比如假设我的目标是,没有引擎 UI,用代码来创建对象,没有 UI 系统,没有预设物理,那么我可能至少需要下面这些东西:

    - 事件循环(渲染和计算至少要异步化对吧)
    - 输入管理器(「游戏操作」和「物理输入」的映射,比如组合键)
    - sprite (对象)管理器(切图、对象关系和变换、shader 或材质、包围盒、碰撞检测……)
    - 动画管理器(图片组、动画混合)
    - 渲染器

    每个组件都有很多工作要做,因此强烈建议参考成熟引擎的代码结构,你能一目了然地从文件名就看出需要做什么:
    https://github.com/cocos2d/cocos2d-x/tree/v4/cocos/2d

    具体到你提到的 opengl/图形 API 上,如果你是自顶而下考虑的,自然会想在渲染器和图形 API 之间抽多一个虚拟层,让引擎本身诸如创建 texture,应用 shader 这些事与具体 API 隔离开。所以具体到图形 API 这一层要考虑的就是

    - 怎么(分别用 opengl/dx/vulkan )画图片
    - 怎么(……)正确混合半透明的图片
    - 怎么( )画文字
    - 怎么变换摄像机
    - ……

    那方向就清晰了,先搞清楚怎么用 opengl 把图画出来,然后就可以开始撸了。如果怕 opengl 要凉,那就用 dx 呗,反正到这一层无论用什么 api 要干的活都是同样的那些而已
    ChrisFreeMan
        22
    ChrisFreeMan  
    OP
       2021-09-01 08:30:21 +08:00
    @levelworm 好家伙,一个小时起步,我挑两集看看
    ChrisFreeMan
        23
    ChrisFreeMan  
    OP
       2021-09-01 08:32:05 +08:00
    @GeruzoniAnsasu 很详细了朋友,有心了
    choiceice
        24
    choiceice  
       2021-09-01 09:01:36 +08:00
    GAMES101,202 图形学课程
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     4908 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 28ms UTC 03:51 PVG 11:51 LAX 19:51 JFK 22:51
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86