我正在为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
答案 0 :(得分:1)
假设您没有在着色器中实现某些疯狂的东西,或者您正在使用固定功能管道功能,这应该是相当简单的。
OpenGL中的纹理坐标始终被标准化,这意味着它们落在[0-1]的范围内;
所以基本上只要你绘制对象时,你总是将纹理的坐标设置为最大1和最小0,你应该总是让纹理填充你的四边形。
您是否可以提供用于绘制4分的代码?如果我能看到它,我也许可以提供帮助。