【问题标题】:Make texture fit 4-point polygon/plane with GLScene or OpenGL for Delphi使用 GLScene 或 OpenGL for Delphi 使纹理适合 4 点多边形/平面
【发布时间】: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


【解决方案1】:

假设你没有在你的着色器中实现一些疯狂的东西,或者你正在使用固定函数管道功能,这应该是相当微不足道的。

OpenGL 中的纹理坐标总是归一化的,这意味着它们在 [0-1] 的范围内;

所以基本上只要你在绘制你的对象时你总是将纹理的坐标设置为最大 1 和最小 0 你应该总是让纹理填充你的四边形。

您能否提供用于绘制 4 点的代码?如果我能看到它,我可能会提供帮助。

【讨论】:

  • 我没有可用的代码,因为我使用了 GLScene,我基本上将一个 TGLPlane 对象添加到由 4 个点组成的场景中。我不知道在 GLScene 处理所有事情时如何操纵这 4 个点。所以我什至不能尝试你的建议。不过,我现在正在研究 GLScene 以了解如何操作 TGLPlane 的 4 个点。
  • 好吧,只要你平面上的纹理坐标使用的是归一化坐标,你就不应该有任何问题。
猜你喜欢
  • 2020-10-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多