【问题标题】:How to create a 2D "perspective"/trapezoid view in OpenGL?如何在 OpenGL 中创建 2D“透视”/梯形视图?
【发布时间】:2012-03-21 08:30:57
【问题描述】:

在 OpenGL 中绘制 2D 视图很简单:只需使用 GLOrtho。但据我所知,这总是会给你一个矩形视图。但是,如果您想要更复杂的视角怎么办?

假设我有一张比我的视口大得多的地图,我想将它绘制成一个透视梯形视图,其中底部(近)边比远边窄。但我仍然希望一切都是 2D 的。

如何将视口设置为以这种方式显示,理想情况下无需更改我的实际绘图代码?我希望能够设置一个新的视口,然后将所有内容绘制到相同的坐标并让 OpenGL 计算出透视图。

我正在寻找的效果类型的基本说明:最终幻想 4 的飞艇视图

有人知道怎么设置吗?假设只是为了提供一些数字,我的基本视口是 800x600,我希望梯形视图在底部显示相同的 800 像素,但在顶部显示 1200 像素。

【问题讨论】:

  • 历史背景,you too can achieve Mode 7
  • @K.G.:是的,我看过那篇文章。它说“伪透视”需要在每个扫描线的基础上创造性地使用矩阵(OpenGL 中不存在的概念)并且它没有说明需要什么样的矩阵数学.
  • 当然可以!在“公式”标题下查看。 “使用模式 7 图形的平面纹理贴图是通过使用 2D 仿射变换将屏幕坐标转换为背景坐标生成的......”
  • @K.G.:我看到了。请看下一段,它解释了该技术的局限性,并明确指出其他事情,包括透视图,需要未指定的每扫描线操作技巧。
  • 明白了。它没有回答你的问题,我只是觉得这是一个有趣的好奇心。顺便说一句,你看过Nicol Bolas' OpenGL tutorial series吗?

标签: opengl 2d


【解决方案1】:

使用透视投影并倾斜视图。

【讨论】:

  • -1。对不起,但这绝不是我问题的答案。我没有问“做什么”,而是问“怎么做”。投影和矩阵数学不是我的强项。在 opengl.org 的文档中四处寻找,我有一个模糊的想法,即调用 glOrtho,紧随其后的是 gluPerspective 可能是我需要做的,但解释都是用密集的数学术语,没有任何实际有用的东西,例如示例代码。
  • @MasonWheeler:您使用 gluPerspective 而不是 Ortho,因为您真正想要做的是用透视法观察平面。我没有给你更多信息是因为你没有给我们所需的细节(你如何绘制你的场景,你使用什么样的几何图形等)
  • 我通过将所有内容渲染到渲染目标上然后将其作为单个四边形渲染到屏幕来绘制场景。这使得影响整个屏幕的效果更容易。所以这个问题基本上相当于,“我如何渲染一个比视口大的单个四边形,并让它像示例截图一样以 2D 梯形/透视视图出现?”可以安全地假设四边形足够 视图不会包含整个事物。我可以使用点精灵来获得“地平线上的天空”效果;我只关心地图。
  • 如果您使用 3D openGL,则将 2D 地图渲染到平面矩形四边形上。将四边形本身的变换设置为将其旋转 45 度 X(俯仰)。将有一些方法可以在旋转方面改变变换,而无需直接改变矩阵。如果它以错误的方式倾斜,请改用 315 度 X(俯仰角)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多