0

在此处输入图像描述

我已经问过一个关于纹理映射的问题,这两个是相关的(这个问题)。

我正在使用 Quartz Composer,它似乎对纹理有点特殊......

我有一个复杂的多边形,我在特定的坐标系中进行三角剖分(x 上的 -1 -> 1 | -0.75 -> y 上的 0.75)。我在这个坐标系中获得了一个三角形顶点数组(左侧图片上的三角形 1 到 6)。

然后我分别渲染每个多边形(这是我的程序所必需的),方法是在它的顶点上应用一个缩放函数,从这个坐标系到 OpenGL 一个(0. -> 1.)。在这里,即使对于 0->1 范围,这有点愚蠢:

return (((1. - 0.) * (**myVertexXorY** - minTriangleBound)) / (maxTriangleBound - minTriangleBound)) + 0.;

但我希望在这些三角形上对一张图像进行纹理处理(如上图所示)。因此,我首先获取整个多边形边界(右图中的 1),然后是三角形边界(右图中的 2)。我将 1 缩放到以像素为单位的图片坐标(右侧图片上的 3),然后我得到以像素为单位的三角形边界(2)。

它为我提供了使用 Quartz 在 OpenGL 中锁定纹理的界限:

NSRect myBounds = NSMakeRect(originXinPixels, originYinPixels, widthForTheTriangle, heightForTheTriangle);

我锁定了我的纹理

[myImage lockTextureRepresentationWithColorSpace:space forBounds:myBounds];

然后,使用 OpenGL:

for (int32 i = 0; i < vertexCount; ++i)
                    {
                        verts[i] = myTriangle.vertices[i];

                        texcoord[0] = [self myScaleFunctionFor:XinQuartzCoordinateSystem From:0 To:1]
                        texcoord[1] = [self myScaleFunctionFor:YinQuartzCoordinateSystem From:0 To:1]

                        glTexCoord2fv(texcoord);

                    }

我得到了你所看到的:有时图像的某些部分是合适的,有时不是(嗯,事实上,对于这个特定的多边形,它根本不合适......)。

4

1 回答 1

1

我不确定我是否确实理解了您的问题,但是:

是什么阻碍了您直接提供与源图片的拓扑相匹配的纹理坐标?这比尝试找到一些以正确方式移动图片的每个三角形线性映射要容易得多。

于 2012-09-06T15:32:01.357 回答