zoukankan      html  css  js  c++  java
  • 透视校正插值(Perspective-Correct Interpolation)

    在渲染器光栅化每个三角形的过程中,需要对根据顶点属性对三角形进行扫描线插值。此时由于投影面上顶点的2D坐标与顶点属性不成线性关系,因此是不能简单地使用线性插值来计算顶点属性的。

    此时应当利用透视校正插值(Perspective-Correct Interpolation)来计算。

    设3D空间中存在一条线段,它的两个端点为A和B,3D坐标分别为(x1,y1,z1)和(x2,y2,z2)。这两点投影到camera坐标系投影面的两点为a(p1,q1)、b(p2,q2)。那么:

    设该线段之间存在一个三维点C(投影到2D平面时我们用小写c表示),它的三维和二维坐标分别为(x3,y3,z3)、(p3,q3),

    c=(1-t)a+tb。则可以证明

    1/z3=(1-t)*(1/z1)+t*(1/z2) (1)

    因为在网格模型中顶点属性与顶点的坐标值成线性关系,因此可以利用求出的z值来计算相应的顶点属性。

    举个例子,假设我们已知3D空间的两个端点A和B,要求出该线段投影到视平面上2D线段的中点所对应的3D坐标。可以先利用公式(1)推导出该点的z坐标(t已知为1/2),

    然后接下来有两种方法:

    1、计算t1=(z3-z1)/(z2-z1),然后可以得到x3=t1*(x2-x1)+x1,y3以此类推。

    2、根据x3/z3=t*x2/z2+(1-t)*x1/z1得到x3,y3同理。

    这两种方法经我推导证明得到的结果是一样的。

    具体的推导可以件这两篇博客:

    http://blog.csdn.net/popy007/article/details/5556639

    http://blog.csdn.net/popy007/article/details/5570803

  • 相关阅读:
    kibana 版本kibana-4.3.1 修改地图
    安装GeoIP数据库
    获取nginx ip地理信息
    数据接口示例
    elasticsearch 搜索不支持单词的部分进行匹配
    5,扩展方案
    (?m)使用实例
    Oracle 唯一主键引发的行锁
    场景2 nginx 错误日志格式:
    POSTGRESQL NO TABLE
  • 原文地址:https://www.cnblogs.com/wickedpriest/p/5509007.html
Copyright © 2011-2022 走看看