c++ - OpenGL同时绘制2D和3D

标签 c++ opengl graphics 3d 2d

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

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

最佳答案

glOrtho() 是正确的选择。

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

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

enter image description here

(image credit:MSDN)

一旦您有了投影矩阵,就不要让矩阵乘法的想法吓到您。这正是显卡的设计目的,对于当今的任何处理器或 GPU 来说,这都不是一项可怕的任务。

关于c++ - OpenGL同时绘制2D和3D,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14105017/

相关文章:

c++ - OpenGL 相机类

c++ - 以编程方式检索 QSS 样式表属性的值

c++ - OSX 上 boost::program_options 和 C++11 的链接器错误

c++ - 如何在 C++ 中找到两个 std::hash_set 的交集?

ios - 在 iOS 上,为什么 100 "points"在不同的设备上大小不同?

c++ - 将 glutTimerFunc 与 glutMouseFunc 一起使用

r - 如何用R中的数据值或百分比标记直方图条

c++ - 为了方便起见,本地指针/引用的性能

OpenGL 与 OpenCL,选择哪个以及为什么?

c++ - 在 C++ 中更新静态函数中的非静态成员