我正在从正交视角渲染纹理四边形,并希望通过修改四边形(左上角,右上角,左下角,右下角)的紫外线和顶点位置来模拟“深度”。
我发现如果我使左上角和右下角的y位置相同我没有得到线性'倾斜'而是一个扭曲的纹理覆盖顶部三角形(构成四边形) )当底部三角形纹理看起来正常时,似乎被压扁了。
我可以改变四边形中的四个点中的任何一个(但是仅在2D空间中,它是正交投影,因此3D空间无关紧要)。所以基本上我试图在正交投影中模拟二维四边形的视角,任何想法?它在数学上是否可行/可行?
理想情况下,我喜欢的是我可以通过函数设置x / y旋转以及虚拟z'位置(模拟z深度)的情况,并在内部查看位置/ uvs来创建3D效果。看起来这应该都是数学的,其中一组2D变换可以应用于四边形的每个角来模拟深度,我只是不知道如何实现它。我猜它需要三角函数或其他东西,我试图压缩数学但没有取得多大进展。
这就是我的意思:
左上角只是卡片,中心是y度旋转X度的卡片,最右边是不同程度x和y旋转的卡片。
答案 0 :(得分:4)
要计算角的2D坐标,只需选择3D中的坐标并应用3D透视方程:
原卡角(x,y,z)
应用旋转(通过矩阵乘法)得到(x',y',z')
应用透视投影(选择一些相机原点,方向和视野) 对于最简单的情况,它是:
现在更大的问题是用于从像素坐标获取纹理坐标的纹理:
正确的方法是使用表格的单应变换:
事实是应用于平面的各个方程的结果。
计算a,b,c,d,e,f,g,h,使得(U,V在[0..1]中):但您的2D渲染框架可能使用双线性插值:
在这种情况下,你会得到一个糟糕的结果。
如果渲染器将四边形分成两个三角形,情况就更糟了!
所以我只看到两个选项: