坐标变换中出现的像素点位置偏离
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