微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用硬件加速为 2D 图形设置 C++ 项目

如何解决如何使用硬件加速为 2D 图形设置 C++ 项目

我正在尝试用 C++ 创建一个模拟渲染管道的项目,以便更好地了解它的工作原理。我也想使用硬件加速(使用计算着色器程序)来提高程序的速度,但我在互联网上找不到太多有用的信息。我正在考虑将 OpenGL 用于 2d 图形,但为了提高性能,我需要禁用 3d 渲染阶段,以便我可以拥有纯 2d 图形。该计划的目标是

  1. 矢量对象 vec<int size,T>

  2. 顶点对象 vert a(vec<3,int> pos,vec<4,int> col)

  3. 放置像素gfxPixel(vert a)

  4. 创建线gfxLine(vert a,vert b)(带插值)

  5. 创建面gfxFace(vert a,vert b,vert c)(带插值)

  6. 用于 3D 渲染的矩阵和其他数学对象(稍后)

如何为我计划使用 OpenGL 实现的图形使用硬件加速以获得最大速度?我计划从头开始实现这些功能(除了 gfxPixel 命令,因为它似乎是基本的)。如果对我应该如何设置这个项目有任何帮助,那将是非常有帮助的,谢谢。

解决方法

OpenGL 中没有 2D 渲染加速。

不过,如果您只是忽略 Z 坐标,您可以将 OpenGL 用于 2D 图形。在您渲染的形状中将其设置为 0;设置一个沿 Z 轴指向的正交相机,以便只有 X 和 Y 坐标有任何区别。实际上,这是默认相机。

使用硬件加速来绘制像素不会使您的程序更快。发送命令以绘制像素比在 CPU 上绘制位图图像中的像素所需的时间更多。如果您要绘制许多像素,则在 CPU 上绘制位图图像中的所有像素,然后在一个命令中将整个图像发送到 GPU 是有意义的。或者,您可以发送一个命令一次绘制所有像素。如果您想绘制一整屏像素,第一个选项是有意义的;如果您想绘制数千个像素(但不是整个屏幕),则第二个选项很有意义。

,

如果您使用 OpenGL,则没有 2D/3D 图形的概念。如果使用正交投影,则会得到 2D,如果使用透视投影,则会得到 3D。

您的屏幕是 2D 的,透视投影会在您的 2D 屏幕中产生 3D 的错觉。

假设您的硬件具有 OpenGL 加速功能(例如 OpenGL 4 左右),那么您需要在系统中安装适当的驱动程序和库。这与 OpenGL 中的实际编程无关。

对于绘图和纹理,您可以选择 GLSL(顶点和片段着色器),这样您就可以在图形硬件中执行程序,而不是将大部分时间花在 CPU 上。

一个好的起点可能是this.

和矩阵解释here.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。