http://www.opengpu.org/forum.php?mod=viewthread&tid=6610
测试在ps中计算uv坐标:
在ps中传入uv坐标,包含viewspace坐标的纹理t1,和生成t1的projectmatrix(这个其实只传了
projectmatrix[0][0]和projectmatrix[1][1])。
通过从vs传入的uv在t1中取出viewspacepos,然后通过下面的代码计算对应的uv
u = viewspacepos.x * projectmatrix[0][0];
v = viewspacepos.y * projectmatrix[1][1];
u /= -viewspacepos.z (使用opengl view matrix)
v /= -viewspacepos.z
u = u * 0.5 + 0.5;
v = 0.5 - v * 0.5;
然后比较手动计算的uv和从vs传入的uv,发现大概有0.04左右的误差。也就是说如果800x600的分辨率
有(32,24)个像素的误差。我想在光栅化中插值会有误差,但是现在这个误差也太大了。各位帮忙
分析下,到底问题出在什么地方。
先用普通做法变换到投影空间再看结果,先调对结果再优化。
先前实用的数据viewspacepos.z有问题
不过改正过后还是有0.001的误差。
比如vs传到ps的uv为(0.111,0.232)
自己计算的为(0.110,0.231)
这个属于正常范围吗?
ps的像素点经过了插值,你这样必然有误差存在呀。。。。
恩,那这个0.001的误差应该是正常的,不应该有这么大的误差
也遇到过这样的情况,我的做法就是加上那个误差值,也就是你说的那个0.001误差,具体原因倒没有
细查。
测试在ps中计算uv坐标:
在ps中传入uv坐标,包含viewspace坐标的纹理t1,和生成t1的projectmatrix(这个其实只传了
projectmatrix[0][0]和projectmatrix[1][1])。
通过从vs传入的uv在t1中取出viewspacepos,然后通过下面的代码计算对应的uv
u = viewspacepos.x * projectmatrix[0][0];
v = viewspacepos.y * projectmatrix[1][1];
u /= -viewspacepos.z (使用opengl view matrix)
v /= -viewspacepos.z
u = u * 0.5 + 0.5;
v = 0.5 - v * 0.5;
然后比较手动计算的uv和从vs传入的uv,发现大概有0.04左右的误差。也就是说如果800x600的分辨率
有(32,24)个像素的误差。我想在光栅化中插值会有误差,但是现在这个误差也太大了。各位帮忙
分析下,到底问题出在什么地方。
先用普通做法变换到投影空间再看结果,先调对结果再优化。
先前实用的数据viewspacepos.z有问题
不过改正过后还是有0.001的误差。
比如vs传到ps的uv为(0.111,0.232)
自己计算的为(0.110,0.231)
这个属于正常范围吗?
ps的像素点经过了插值,你这样必然有误差存在呀。。。。
恩,那这个0.001的误差应该是正常的,不应该有这么大的误差
也遇到过这样的情况,我的做法就是加上那个误差值,也就是你说的那个0.001误差,具体原因倒没有
细查。