坐标变换中出现的像素点位置偏离

来源:互联网 发布:超基因优化液下载免费 编辑:程序博客网 时间:2024/04/29 14:51

坐标变换中出现的像素点位置偏离

3d引擎中实现坐标系变换时,发现一个诡异问题,在屏幕右半边画出来的线有很明显的锯齿状,断断续续,而左半边没有问题,困扰多日。偶然间受到启发,把参与变换的x源坐标多加0.5,就一切正常了。


我的变换是这样:源坐标系以屏幕左下角为原点,屏幕宽高为(640,480),即x轴范围是0--639,y轴范围是0--479。目标坐标系以屏幕中心为原点,x轴范围是-1–1,y轴范围是-1–1。例如:需要把坐标(320,240)变换成(0,0)。


在没有加0.5前,变换算法是这样:

Vec2 v;float w = s_screenSize.width / 2;float h = s_screenSize.height / 2;v.x = (x - w) / w;v.y = (y - h) / h;
调试log如下:
源x 目标x
319 -0.00312 
320 0
321 0.00312


加上0.5后,变换算法是这样:
Vec2 v;float w = s_screenSize.width / 2;float h = s_screenSize.height / 2;v.x = (x + 0.5f - w) / w;v.y = (y - h) / h;
调试log如下:
源x 目标x
319 -0.00156
320 0.00156
321 0.00468


可以看出,没加0.5时,如果源x为320,则目标x正好为0;加上0.5后,即使源x为320,目标x也是非0。我画点用的底层库是OpenGL,为什么在原点处画点后会导致后续点位置都略有偏差呢?而y轴变换不需要加0.5也是正常的?这里还是有点不太明白。

0 0
原创粉丝点击