打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
纹理坐标三角形内插值问题,我搞不定了。?


经过各位高手解答,我这个故事有更新。更新在第二个分割线后面。
--------------------------------------------------------------------------------------------------------------------

我想问问,当给定三角形三顶点的纹理坐标,如何插值获得三角形内部所有点的纹理坐标?

我从网上找了一种“重心坐标法”,现在可以根据三角形三顶点颜色值,插值出内部点的颜色值。显示出来看到效果也挺好。但当我想套用该法插值纹理坐标时,发现效果不对。

我找的“重心坐标法”简单说是这样的:

设三角形三点p1,p2,p3;它们对内部任一点p的“贡献”为c1,c2,c3,则对于任何“可插值”量来说,有

p=p1*c1+p2*c2+p3*(1-c1-c2)。

其中pn为顶点的给定值,p为插值。

由于点坐标是可插值的(三角形是平面所以可以线性插值),所以将xy分别代入上面公式后,得到了有c1,c2两个未知数的两个线性方程(组)。

我简单变换了一下公式,放到程序里,来一个三角形就可求得三个顶点的贡献值。然后我用颜色和法线测试,貌似显示出来的效果都挺好。

最后我搞了一个直角三角形,给定三个顶点的纹理坐标为(0,0), (0,1), (1,1)。你一定可以想象出,我是希望沿着对角线把 左-上 半张纹理贴到直角三角形上。效果看上去应该没有扭曲,是裁开的样子。

但是实际上我发现插值出来的纹理坐标,在三角形内一“横行”之内,x坐标还好,y坐标随着x增大而略微增大,使得贴图看上去扭曲了。这样一来,自然当显示一整个mesh时,贴图都不对。

抱歉这会儿在地铁上,明天争取贴截屏。

我想问问:

1,纹理坐标能用“重心坐标法”线性插值吗?

2,如果能,为何我得到这样的结果?错在哪了?

3,如果不能,那么显卡是怎么做的?换作你会怎么做?(其实我觉得能,理由是:一般我们会把法线、纹理坐标,世界坐标等等一并从vertex shader输出,然后又在fragment/pixel shader里一并接收它们。显卡并不知道它们的差别,所以只能用相同方法插值。)

--------------------------------------------------------------------------------------------------------------------

首先说一下故事的背景。最近单位比较闲,那天我心血来潮想用纯软件编程实现一下OpenGL+显卡的功能,看看我能实现多少它们的功能。顺便也能透彻理解一下底层原理。

然后,回答里有人说不明白我说的“将xy分别代入上面公式”是什么意思?意思就是下面公式所示:
 

其中P,P1,P2,P3为三角形三个顶点和一个待插值的三角形内点,它们是已知量,C1,C2以及(1-C1-C2)为三顶点贡献值。解方程组可得三个贡献值。

下图是我发此问题时出错的图,害我很绝望,事后发现确实是敲程序时的手误引起。
 


改了手误后,发现正对着投影面是对的,侧个身就错了。如下图。
 

上图的纹理坐标插值公式如下。(此时C1和C2是已知量)
 


幸亏回答的高手们告诉我,还有“透视校正”一说。改吧。暂时懒得看校正公式的推导过程了,先拿来试一试!

首先用三个顶点的NDC的 z 插值获得待插值内点的 z。
 

您可能已经注意到了,上面公式是直接用 z 而不是其倒数计算的,我心想这能有多大差别?(因为懒得看公式推导的原理了。民科的典型心态。)然后用 z 校正纹理坐标插值如下。(v 类似)
 

然后获得的效果如下。
 

虽然依然是很寒碜,但是明显看到,logo大体上不扭曲了。只是还是有点……

好吧,我心里知道高手给的博客链接里,明明说 z 的倒数是可以线性插值的。人家没说 z 本身也可以线插。所以就不图省事了,将插值公式改为:
 

这下效果终于对了。
 

太不容易了!

谢谢各位高手指点。最后附上一张有正确插值的,有diffuse和specular光照的图。好开心。
 

接下来打算试一试bump mapping、shadow map、shadow volume,和deferred rendering。然后再用多核模拟一下多条管线,可惜相比之下cpu的核真的很少。
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
深入探索透视纹理映射(上)
C++ 笔试题 之基础 45 图形学 线性插值 网易盘古
如何利用三个顶点的坐标求三角形的面积
用行列式表示的三角形面积公式
【中考数学课堂】第226课
GPU是如何工作的
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服