最全面、最前沿、最专业的游戏研发实战

提供最全面的游戏研发技能分享,让您在最短时间变成高级游戏工程师

查看:0|回复:5

【环境】为什么感觉OpenGL非常原始,很难用,什么都要自己实现?

 attach_img

3

帖子

2

回复

4

积分
最后登录:
2025-03-26 19:48
注册时间:
2024-06-15 22:06
楼主
  发表于:2025-03-26 22:36:59|查看用户信息

为什么感觉OpenGL非常原始,很难用,什么都要自己实现?

5

帖子

3

回复

6

积分
最后登录:
2025-03-26 19:46
注册时间:
2024-10-11 22:10
1 楼
  发表于:2025-03-26 22:37:25|查看用户信息

OpenGL目前被淘汰的主要原因在于 不够原始,隐藏了太多细节,并且做了太多不需要做的事。

现在的主流图形API的主要进化路径就是变得 更加原始, 充分契合GPU的硬件结构。


2

帖子

5

回复

7

积分
最后登录:
2025-03-26 19:20
注册时间:
2024-07-07 17:04
2 楼
  发表于:2025-03-26 22:38:00|查看用户信息

如果你再看看dx11,你会发现dx11也大差不差。

如果你再去看看vulkan你会发现opengl已经算是开箱既用了。

如果你尝试改改unreal的渲染管线,你会发现,它倒是不原始了,但是复杂的鬼哭狼嚎。


7

帖子

4

回复

10

积分
最后登录:
2025-03-26 18:20
注册时间:
2023-02-26 15:02
3 楼
  发表于:2025-03-26 22:39:33|查看用户信息

虚假的自己实现:一句glBufferData就能把vertex array和index array发送到显存,一句glDrawArray或者glDrawElement就能完成光栅化的绘制过程,深度测试方法用状态机的上下文即可一键指定。


真实的自己实现:

1、遍历每个像素,往三维世界做垂线;

2、每三三一组遍历index array取出三个能构成一个三角形的vertex,首尾相接组成的三个向量分别和你投进屏幕的这个点与三个点的连线组成的向量叉乘,根据正负判断这个像素在三角形内还是外,

3、然后调用shader计算着色,点与点之间的区域用三角形重心坐标插值,对于多个三角形在屏幕深度方向上的重叠,

4、单独开个尺寸为屏幕分辨率的二维数组作为深度缓冲,每绘制一个像素进行深度测试,绘制在最前面的那个三角形上的像素颜色。


2

帖子

1

回复

3

积分
最后登录:
2025-03-26 19:58
注册时间:
2023-10-11 18:36
4 楼
  发表于:2025-03-26 22:40:21|查看用户信息

opengl封装得已经很彻底了,你可以试试vulkan,看有多细

现在我用jextract生成vulkan的java api,操作起来大概需要一千行代码左右,才能把三角形画出来。

而光用jextract生成的对应vulkan_h.java就有18多万行代码,这个浩瀚的工作已经由工具给你代劳了,但即便如此,整个流程还是比较繁琐。


4

帖子

6

回复

10

积分
最后登录:
2025-03-26 21:20
注册时间:
2023-11-10 17:16
5 楼
  发表于:2025-03-26 22:41:29|查看用户信息

你有这个感觉就对了,ogl作为图形API其定位就是让你直接与硬件打交道,“什么都去自己实现”的。

而且实际开发中大家反而是嫌弃ogl不够原始不够难用,隐藏了太多的硬件细节在驱动里,调度精细度也远远不够,所以后来大家才又搞了更加原始更加难用的次世代图形API,比如vk和dx12。

换言之,如果你感受到的原始和难用不是你想要的,那你可能是学错了东西,可能你需要的是bgfx之类封装好的RHI,亦或者是Unity这种现成的游戏引擎。


共 1/1 页

0

帖子

0

回复

0

积分
最后登录:
1970-01-01 08:00
注册时间:
1970-01-01 08:00
会员必须登录才能发布帖子! 点击登录