【发布时间】:2014-09-30 11:36:00
【问题描述】:
我正在为 Delphi XE2 使用最新的 GLScene 主干 我从事过一个使用 3D 而不是 2D 的 GUI-ish 类型的项目 在屏幕上绘制 GUI 元素。
它可以工作,但由于显而易见的原因,图形放置不是像素完美的。
我已设法映射 3D 视图,以便 TGLSceneViewer 上的 1 个像素或多或少 屏幕上的 1 个像素。这对我来说已经足够了。
但是我放弃了在我的 GUI 中使用 3D 的想法,我将专注于 关于使用 GLScene 进行二维图形表示,因为它是 GPU 加速的。
然后我记得在以前使用 Graphics32 的项目中使用投影变换 对于我的 GUI。
通过投影变换,我可以简单地在 3D 空间中绘制点, 读取这些点的 3D 坐标,将坐标转换为 2D 坐标,然后 将这些应用于 TBitmap32 投影变换参数和中提琴, 我的软件中有 3D 功能。
所以,我的问题是:
是否可以在 GLScene 或 OpenGL 中“拉伸”纹理以使纹理适合 4个点,或者在一个平面内,这样每当我将平面的角移动到一个新位置时, 纹理会被相应地拉伸吗?
这样我就可以将 GLScene 用于 2D 图形,但可以通过一些简单的技巧来使事物看起来像 3D。
下面的链接指向互联网上的一张图片,它是我正在寻找的内容的直观表示: http://i.stack.imgur.com/hDdqa.png
【问题讨论】:
-
为什么不使用 FireMonkey?它是原生的 2D 和 3D,并且是硬件加速的(包括 2D 版本)。几乎所有您想要的东西,无需自己从头开始编写。
-
如果我没记错的话,Firemonkey的性能并不是那么好。还是我错了?
-
当它在早期版本(我认为是 XE4 及以下)中无法使用 Direct2D 时,当它退回到 GDI+ 时出现问题。只要您使用的是 Vista 或更高版本,您应该没问题。我每天都在 XE6 中使用它来进行 2D 工作,它很棒。像任何库一样,您需要了解一些事情,例如,如果您将文本对象大量绘制到屏幕上,那么缓存您的文本对象会很方便,等等。对于 VCL,您也需要了解类似的事情!总的来说,它运行良好,速度很快,我很高兴。
-
我在办公室有一份 XE6 的副本,但我用的不多。我会看看它,看看我得到了什么表现
-
好吧,我现在正在玩 Delphi XE6。我将发布一个新问题,因为似乎 firemonkey 是要走的路,而不是我重新发明轮子。谢谢你的信息。
标签: delphi opengl projective-geometry glscene