我正在为Delphi XE2使用最新的GLScene干线,并且我从事的是GUI风格的项目,该项目使用3D而不是2D在屏幕上绘制GUI元素。
它可以工作,但是由于明显的原因,图形的位置不是像素完美的。
我设法映射了3D视图,以便TGLSceneViewer上的1像素在屏幕上或多或少为1像素。对我来说足够了。
但是,我放弃了在GUI中使用3D的想法,而我将专注于仅使用GLScene for2D图形表示,因为它是GPU加速的。
然后,我记得在以前的项目中使用了Projective Transformation,在该项目中我将Graphics32用于GUI。
使用投影变换,我可以简单地在3D空间中绘制点,读取这些点的3D坐标,将坐标转换为2D坐标,然后将其应用于TBitmap32投影变换参数,中提琴,我的软件中具有3D功能。
所以,我的问题是:
是否可以在GLScene或OpenGL中“拉伸”纹理,以使该纹理适合4个点之间或一个平面内,以便每当我将平面的角移到新位置时,纹理都将相应地拉伸?
这样,我可以将GLScene用于2D图形,但是可以做一些简单的技巧来使事物看起来像3D。
下面的链接指向互联网上的图像,该图像是我所寻找内容的直观表示:http : //i.stack.imgur.com/hDdqa.png
假设您没有在着色器中实现某些疯狂的功能,或者正在使用固定功能管线功能,那么这应该是微不足道的。
OpenGL中的纹理坐标始终是规范化的,这意味着它们的落入范围为[0-1];
因此,基本上,只要在绘制对象时,始终将纹理的坐标设置为最大1和最小0,就应该始终使纹理充满四边形。
您能否提供用来绘制4点的代码?如果可以看到的话,我也许可以提供帮助。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句