我在VR领域工作,对投影屏幕的良好校准非常重要,并且由于难以调整的天花板安装和其他硬件特性,我正在寻找一种全屏着色器方法来“校正”形状屏幕。
大多数2D或3D引擎允许通过在可以自定义方式变形或渲染的四边形上重绘渲染结果来应用全屏效果或变形。
第一个想法是使用顶点着色器来偏移此屏幕四角的角落,因此图像变形为四边形(如投影仪上的硬件梯形),但对于要求来说还不够 (这种方法在math.stackexchange上用实时小提琴演示进行了描述)。
在我的目标案例中:
u,v => corrected_u,corrected_v
您可以找到插图here。
答案 0 :(得分:0)
继续我的研究,我找到了一种方法。 我创建了一个1D RGB纹理,对应于" ramp"或余弦值。这将是偏移参数在0..1轴上的3个影响系数,其中3个系数分别为0,0.5和1:
有了这些,从9个float2制服我可以非常轻柔地在图像上插入我的参数(在水平方向上有3个查找,在垂直方向上有最后一个查找)。
然后,一个插值,我偏移纹理坐标与它们的工作:-D 这或多或少是使用纹理查找加速的坐标的加权插值。
答案 1 :(得分:0)
如果您需要非线性变形,Bezier Surfaces非常方便且易于实现。
您可以预先在CPU中构建它们,也可以使用硬件细分(示例提供here)