admin管理员组

文章数量:1130349

1、起因:简单说就是,在透视矩阵作用下,矩形的两对平行的边中得至少一对将不再平行,导致构成改矩形的两个三角形不再等大,所以其纹理坐标也不再等比;

详细的可参照这篇博文 伪 3D 中的贴图纹理的透视矫正-腾讯云开发者社区-腾讯云

2、具体矫正方式:通过三角形顶点的齐次坐标的w分量完美解决

假设三角形三个顶点其次坐标为:pts[3][4];        // pts[i][3]为w分量

对应的纹理坐标为:texPos[3][2];

任一点的重心坐标为(a, b, c)

则可得校正后的纹理坐标为

texX = (a/pts[0][3]*texPos[0][0] + b/pts[1][3]*texPos[1][0] + c/pts[2][3]*texPos[2][0]) / (a/pts[0][3] + b/pts[1][3] + c/pts[2][3]);

texY = (a/pts[0][3]*texPos[0][1] + b/pts[1][3]*texPos[1][1] + c/pts[2][3]*texPos[2][1]) / (a/pts[0][3] + b/pts[1][3] + c/pts[2][3]);

=========================================================================

矫正前后效果对比如下,可以看到左边箱子的纹路是折线

 以下是将构成箱子的三角面片画出来的结果,可用于辅助理解

 

最后感谢以下博文作者

math - perspective correction of texture coordinates in 3d - Stack Overflow

伪 3D 中的贴图纹理的透视矫正-腾讯云开发者社区-腾讯云

WebGL 纹理映射的透视纠正

1、起因:简单说就是,在透视矩阵作用下,矩形的两对平行的边中得至少一对将不再平行,导致构成改矩形的两个三角形不再等大,所以其纹理坐标也不再等比;

详细的可参照这篇博文 伪 3D 中的贴图纹理的透视矫正-腾讯云开发者社区-腾讯云

2、具体矫正方式:通过三角形顶点的齐次坐标的w分量完美解决

假设三角形三个顶点其次坐标为:pts[3][4];        // pts[i][3]为w分量

对应的纹理坐标为:texPos[3][2];

任一点的重心坐标为(a, b, c)

则可得校正后的纹理坐标为

texX = (a/pts[0][3]*texPos[0][0] + b/pts[1][3]*texPos[1][0] + c/pts[2][3]*texPos[2][0]) / (a/pts[0][3] + b/pts[1][3] + c/pts[2][3]);

texY = (a/pts[0][3]*texPos[0][1] + b/pts[1][3]*texPos[1][1] + c/pts[2][3]*texPos[2][1]) / (a/pts[0][3] + b/pts[1][3] + c/pts[2][3]);

=========================================================================

矫正前后效果对比如下,可以看到左边箱子的纹路是折线

 以下是将构成箱子的三角面片画出来的结果,可用于辅助理解

 

最后感谢以下博文作者

math - perspective correction of texture coordinates in 3d - Stack Overflow

伪 3D 中的贴图纹理的透视矫正-腾讯云开发者社区-腾讯云

WebGL 纹理映射的透视纠正

本文标签: 纹理透视笔记图形学Correction