zoukankan      html  css  js  c++  java
  • 如何计算投影纹理坐标 补充

    原文见:http://www.cnblogs.com/Pointer/archive/2004/12/20/79323.html

    最近通过学习固定渲染管线的光栅化过程,终于明白了扭曲的原因。

    我们先设V=投影变换前的顶点,V'=投影变换后的齐次顶点。

    在屏幕空间中,V的各项属性并不是线性分布的,但1/Vz是线性分布的,对于其它的顶点属性Vb/Vz也是线性分布的(《Mathematics for 3D Game Programming & Computer Graphics》上有详细的证明),所以我们进行插值的时候应该先对1/Vz进行线性插值,然后对Vb/Vz也进行线性插值,最后将Vb/Vz的插值结果乘以1/Vz插值结果的倒数,得到Vb的插值结果。

    又因为V'w= -Vz(推导见投影矩阵的推导),所以我们一般用1/V'w来替代1/Vz。

    而我在进行纹理投影的时候,将投影变换后的齐次顶点坐标投影到了三维的空间中(即:<V'x/V'w, V'y/V'w, V'z/V'w>),然后用glVertex3f将该坐标传入了固定渲染管线,这样的话就使得纹理坐标的插值由非线性插值变为了线性插值,导致了最终结果的扭曲。

    其实直接用glVertex4f将V'传入固定渲染管线,由固定渲染管线进行透视矫正的话,即可消除这种扭曲现象。



  • 相关阅读:
    mock.js
    v-bind和v-model的区别
    if语句中的return
    js中全局变量和局部变量以及变量声明提升
    js中全局和局部变量的区别
    相对路径、绝对路径
    commonJs
    B/S与C/S
    background-origin
    DOM
  • 原文地址:https://www.cnblogs.com/Pointer/p/90513.html
Copyright © 2011-2022 走看看