【问题标题】:OpenGL drawing 2D and 3D at the same timeOpenGL同时绘制2D和3D
【发布时间】:2013-01-01 03:03:44
【问题描述】:

我正在绘制一个 3D 场景,我想为对话文本绘制一个矩形,该矩形将被拉伸到整个屏幕的宽度,考虑到性能,实现此目的的最佳方法是什么?

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

【问题讨论】:

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


    【解决方案1】:

    glOrtho() 是要走的路。

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

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

    (image credit: MSDN)

    一旦你有了一个投影矩阵,不要让矩阵乘法的想法吓到你。这正是显卡的设计初衷,如今对于任何处理器或 GPU 来说,这都不是一项令人恐惧的任务。

    【讨论】:

    • 我担心性能,因为我正在为手机开发,我不知道他们的 GPU(而且他们的 CPU 真的很慢 imo)与 PC 相比可以容纳多少。这种解决方案适用于手机吗?
    • 肯定会的。即使是集成图形解决方案也不会出现这种问题。 2D 正交投影只是渲染管道的一小部分。
    • @Danicco:除了 Gunther Fox 所说的,今天流行的移动平台的图形系统(以及常规 UI)都是建立在 OpenGL-ES 之上的。实际上,每个图形系统都必须在其管道中的某处执行一些矩阵乘法,以将输入坐标映射到屏幕坐标。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-13
    • 1970-01-01
    • 2020-10-06
    • 1970-01-01
    • 2015-12-18
    相关资源
    最近更新 更多