OpenGL同时绘制2D和3D

时间:2012-12-31 18:36:23

标签: c++ opengl graphics 3d 2d

我有一个正在绘制的3D场景,我想绘制一个矩形用于对话文本,该文本将被拉伸以适应所有屏幕的宽度,实现这一目标的最佳方法是什么,并考虑到性能?

我发现glOrtho()可用于精确像素放置,但由于它是一个矩阵乘法任务,在对话场景中我的应用程序不会感觉更重吗? 如果是的话,我应该尝试找到一个数学解决方案,根据一些Z距离找到我的左窗角的X位置并从那里画一个QUAD? (这有可能吗?)

1 个答案:

答案 0 :(得分:4)

glOrtho()是要走的路。

OpenGL's rendering Pipeline的过程中,在原始组装阶段,每个顶点将从眼睛坐标变换(投影)到剪辑坐标。无论您的投影矩阵是用于3D透视还是2D正交化,在光栅化开始之前,它仍然是每个顶点的一个矩阵乘法。

glOrtho()会将您的投影矩阵更改为正交投影矩阵,但矩阵只需要每帧生成一次,并且所需的公式非常简单:

enter image description here

image credit:MSDN)

一旦你有一个投影矩阵,不要让矩阵乘法的想法吓到你。这正是视频卡的设计目标,对于任何处理器或GPU来说,这几天都不是一件可怕的任务。