使用GLScene或OpenGL for Delphi使纹理适合4点多边形/平面

时间:2014-09-30 11:36:00

标签: delphi opengl projective-geometry glscene

我正在为Delphi XE2使用最新的GLScene主干 我已经开发了一个GUI-ish类型的项目,它使用3D代替2D 在屏幕上绘制GUI元素。

它很有效,但由于显而易见的原因,图形放置并不是像素完美的。

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

但是我放弃了为我的GUI使用3D的想法,我将改为专注 关于使用GLScene for2D图形表示,因为它是GPU加速的。

然后我记得在之前使用Graphics32的项目中使用投影变换 对于我的GUI。

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

所以,我的问题是:

是否有可能"伸展" GLScene或OpenGL中的纹理,以便纹理适合 4点,或在一个平面内,这样每当我将一个平面的角移动到一个新位置时, 纹理会相应拉伸吗?

这样我就可以将GLScene用于2D图形,但是做一些简单的技巧就可以让它看起来像3D。

以下链接指向互联网上的图像,该图像是我正在寻找的内容的直观表示: http://i.stack.imgur.com/hDdqa.png

1 个答案:

答案 0 :(得分:1)

假设您没有在着色器中实现某些疯狂的东西,或者您正在使用固定功能管道功能,这应该是相当简单的。

OpenGL中的纹理坐标始终被标准化,这意味着它们落在[0-1]的范围内;

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

您是否可以提供用于绘制4分的代码?如果我能看到它,我也许可以提供帮助。