0

我正在为 Delphi XE2 使用最新的 GLScene 主干,并且我从事过一个 GUI-ish 类型的项目,它使用 3D 而不是 2D 在屏幕上绘制 GUI 元素。

它可以工作,但由于显而易见的原因,图形放置不是像素完美的。

我已经设法映射 3D 视图,以便 TGLSceneViewer 上的 1 个像素在屏幕上或多或少 1 个像素。这对我来说已经足够了。

但是,我放弃了在我的 GUI 中使用 3D 的想法,而是专注于使用 GLScene 进行 2D 图形表示,因为它是 GPU 加速的。

然后我记得在以前的项目中使用了投影变换,我在我的 GUI 中使用了 Graphics32。

通过投影变换,我可以简单地在 3D 空间中绘制点,读取这些点的 3D 坐标,将坐标转换为 2D 坐标并将其应用于 TBitmap32 投影变换参数,中提琴,我的软件中有 3D 功能。

所以,我的问题是:

是否可以在 GLScene 或 OpenGL 中“拉伸”纹理,使纹理适合 4 个点之间或平面内,这样每当我将平面的角移动到新位置时,纹理都会相应地拉伸?

这样我就可以将 GLScene 用于 2D 图形,但需要做一些简单的技巧来使事物看起来像 3D。

下面的链接指向互联网上的图像,这是我正在寻找的视觉表示:http: //i.stack.imgur.com/hDdqa.png

4

1 回答 1

1

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

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

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

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

于 2014-09-30T11:54:02.437 回答