我正在绘制一个 3D 场景,我想为对话文本绘制一个矩形,该矩形将拉伸(stretch)到整个屏幕的宽度,考虑到性能,实现此目的的最佳方法是什么?
我发现 glOrtho() 可以用于精确的像素放置,但由于它是一个矩阵乘法任务,我的应用程序在有对话的场景中不会感觉更重吗? 如果是,我是否应该尝试找到一个数学解决方案,根据某个 Z 距离找到左窗角的 X 位置,并从那里绘制一个四边形? (这可能吗?)
最佳答案
glOrtho()
是正确的选择。
在OpenGL's rendering Pipeline的过程中,在Primitive Assembly阶段,每个顶点都会从眼睛坐标变换(投影)到剪辑坐标。无论您的投影矩阵用于 3D 透视还是 2D 正交化,在光栅化开始之前,它仍然是每个顶点一次矩阵乘法。
glOrtho()
会将您的投影矩阵更改为正交矩阵,但该矩阵只需要每帧生成一次,并且所需的方程非常简单:
(image credit:MSDN)
一旦您有了投影矩阵,就不要让矩阵乘法的想法吓到您。这正是显卡的设计目的,对于当今的任何处理器或 GPU 来说,这都不是一项可怕的任务。
关于c++ - OpenGL同时绘制2D和3D,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14105017/