如何使用硬件加速为 2D 图形设置 C++ 项目
How to setup a c++ project for 2D graphics with hardware accelleration
我正在尝试用 C++ 创建一个模拟渲染管道的项目,以便更好地了解它的工作原理。我也想使用硬件加速(使用计算着色器程序)来提高程序的速度,但我在互联网上找不到太多有用的信息。我正在考虑将 OpenGL 用于 2d 图形,但为了提高性能,我需要禁用 3d 渲染阶段,这样我才能拥有纯 2d 图形。该计划的目标是
矢量对象vec<int size, T>
顶点对象vert a(vec<3,int> pos, vec<4,int> col)
放置像素gfxPixel(vert a)
创建线gfxLine(vert a, vert b)
(带插值)
创建面gfxFace(vert a, vert b, vert c)
(带插值)
用于 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.
我正在尝试用 C++ 创建一个模拟渲染管道的项目,以便更好地了解它的工作原理。我也想使用硬件加速(使用计算着色器程序)来提高程序的速度,但我在互联网上找不到太多有用的信息。我正在考虑将 OpenGL 用于 2d 图形,但为了提高性能,我需要禁用 3d 渲染阶段,这样我才能拥有纯 2d 图形。该计划的目标是
矢量对象
vec<int size, T>
顶点对象
vert a(vec<3,int> pos, vec<4,int> col)
放置像素
gfxPixel(vert a)
创建线
gfxLine(vert a, vert b)
(带插值)创建面
gfxFace(vert a, vert b, vert c)
(带插值)用于 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.