【发布时间】:2013-01-01 03:03:44
【问题描述】:
我正在绘制一个 3D 场景,我想为对话文本绘制一个矩形,该矩形将被拉伸到整个屏幕的宽度,考虑到性能,实现此目的的最佳方法是什么?
我发现 glOrtho() 可以用于精确的像素放置,但由于它是一个矩阵乘法任务,在对话场景中我的应用程序不会感觉更重吗? 如果是,我是否应该尝试找到一个数学解决方案来根据一些 Z 距离找到我的左窗口角的 X 位置并从那里绘制一个 QUAD? (这甚至可能吗?)
【问题讨论】:
我正在绘制一个 3D 场景,我想为对话文本绘制一个矩形,该矩形将被拉伸到整个屏幕的宽度,考虑到性能,实现此目的的最佳方法是什么?
我发现 glOrtho() 可以用于精确的像素放置,但由于它是一个矩阵乘法任务,在对话场景中我的应用程序不会感觉更重吗? 如果是,我是否应该尝试找到一个数学解决方案来根据一些 Z 距离找到我的左窗口角的 X 位置并从那里绘制一个 QUAD? (这甚至可能吗?)
【问题讨论】:
glOrtho() 是要走的路。
在OpenGL's rendering Pipeline 的过程中,在Primitive Assembly 阶段,每个顶点都会从眼睛坐标转换(投影)到剪辑坐标。无论您的投影矩阵是用于 3D 透视还是 2D 正交化,在光栅化开始之前,它仍然是每个顶点一次矩阵乘法。
glOrtho() 会将您的投影矩阵更改为正交矩阵,但该矩阵只需要每帧生成一次,并且所需的方程式非常简单:
(image credit: MSDN)
一旦你有了一个投影矩阵,不要让矩阵乘法的想法吓到你。这正是显卡的设计初衷,如今对于任何处理器或 GPU 来说,这都不是一项令人恐惧的任务。
【讨论】: