【问题标题】:OpenGL texture mapping with different coordinates systems不同坐标系的OpenGL纹理映射
【发布时间】:2012-08-31 01:04:49
【问题描述】:

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

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

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

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

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

但我希望在这些三角形上添加 一个 图像(如上图所示)。因此,我首先获取整个多边形边界(右图中的 1),然后是三角形边界(右图中的 2)。我以 pixels 为单位将 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);

                    }

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

【问题讨论】:

    标签: objective-c opengl box2d texture-mapping quartz-composer


    【解决方案1】:

    我不确定我是否理解你的问题,但是:

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

    【讨论】:

    • 谢谢!我会尝试这样做并告诉你......我可能不得不改变我的方法,但如果它更简单......
    猜你喜欢
    • 1970-01-01
    • 2010-10-29
    • 1970-01-01
    • 1970-01-01
    • 2011-05-04
    • 2011-03-16
    • 1970-01-01
    • 2019-03-21
    • 1970-01-01
    相关资源
    最近更新 更多