我正在为Delphi使用最新的GLScene主干,我已经完成了一个GUI类型的项目,它使用3D而不是2D在屏幕上绘制GUI元素。
它工作,但图形的位置不是像素-完美的明显的原因。
我已经成功地映射了3D视图,使TGLSceneViewer上的1像素在屏幕上更多或更少1像素。对我来说已经够好了。
然而,我放弃了使用3D作为我的图形界面的想法,我将专注于使用GLScene for2D图形--因为它是GPU加速的。
然后,我记得在以前的一个项目中使用了投影转换,其中我使用了Graphics32作为我的GUI。
通过投影变换,我可以简单地在三维空间中绘制点,读取这些点的三维坐标,将坐标转换为2D坐标,并将这些坐标应用到TBitmap32投影转换参数,而viola,我的软件中有3D能力。
所以,我的问题是:
是否可以在GLScene或OpenGL中“拉伸”纹理,使纹理在4个点之间,或者在一个平面内,这样每当我将平面的角移动到一个新位置时,纹理就会相应地被拉伸吗?
这样我就可以用GLScene来绘制2D图形,但是做一些简单的技巧,让事情看起来像3D一样。
下面的链接指向互联网上的一幅图像,它是我正在寻找的东西的视觉表示:http://i.stack.imgur.com/hDdqa.png。
发布于 2014-09-30 11:54:02
假设你没有在你的着色器中实现一些疯狂的东西,或者你正在使用固定的函数管道功能,这应该是相当微不足道的。
OpenGL中的纹理坐标总是归一化的,这意味着它们在0-1的范围内;
因此,基本上,只要您在绘制对象时,始终将纹理的坐标设置为最大值1和最小值0,则应该始终让纹理填充您的四角体。
你能提供你用来画四点的代码吗?如果我能看到的话,我也许能帮上忙。
https://stackoverflow.com/questions/26119882
复制相似问题