ima*_*ett 3 opengl textures texture-mapping
我有一个GL_QUAD_STRIP,我是纹理映射.四边形条带自身折叠以形成UV球体.基本上,四边形条通常不是由矩形 - 而是梯形.
我遇到纹理失真问题.纹理坐标是正确的(例如,它们排列得很好).问题出在梯形面上.
我希望纹素朝着梯形面的较大一端对着较大的区域,但是面部看起来分成两个三角形.它看起来类似于仿射纹理映射(但我认为它不是;它看起来仍然是正确的,我不希望它仍然被使用).
我知道显卡通常会在内部将四边形减少为三角形,但我不希望这会影响纹理...
所以,我不知道这里发生了什么.有什么想法吗?
以下是不良行为的示例.低分辨率地球纹理,最近的过滤,没有mipmap或各向异性:

纹理化简单四边形时,这是一个经典问题.这是因为(正如你猜对了)将四边形划分为单个三角形.这些三角形又独立地纹理化.
问题是,三角形内部的纹理坐标是从顶点线性插值的(尽管透视正确,但这对此没有帮助).您可以将其成像为不知道此梯形的第四个顶点的光栅化器,它只能看到各个三角形.因此,它假设三角形变换为完全仿射的纹理空间,因此三角形是平行四边形的一部分.
你需要做的就是通过使用完整的4维纹理坐标而不是简单的2D texcoords,从简单的2D仿射纹理空间转移到投影纹理空间,就像这里解释的那样.你基本上做了GL已经用透视正确插值做的事情,但是使用你自己的透视投影来表示纹理坐标(除了已经为顶点位置做的透视投影).