1

我正在使用本教程/示例在 iPhone 上进行一些基本的对象跟踪。一切正常,我什至对性能进行了很多调整,但我仍然遇到一个问题。

基本问题是我对 OpenGL 的理解不够好,我应该因为可耻地获取示例代码并将其变成对我有用的东西而受到惩罚。事实上,我正在受到惩罚;

该示例展示了如何(使用着色器)将 iPhone 的相机渲染为屏幕外纹理,以便能够对其进行处理并将其显示在屏幕上。现在我发现它使用顶点属性数组来绘制纹理/图层(尽管我在谷歌搜索过,但我几乎不理解这个原理)。

顶点数组如下:

static const GLfloat squareVertices[] = {
        -1.0f, -1.0f,
        1.0f, -1.0f,
        -1.0f,  1.0f,
        1.0f,  1.0f,
};

static const GLfloat textureVertices[] = {
        1.0f, 1.0f,
        1.0f, 0.0f,
        0.0f,  1.0f,
        0.0f,  0.0f,
};

我还发现这些顶点属性可以改变绘制纹理的方向。纹理现在是纵向绘制的,这意味着如果我将 iPhone 保持为横向(我想要),并让视图旋转,我在屏幕上看到的一切都是一个 90 度角的相机。

我认为我将问题缩小到足以归咎于这些顶点,并且我一直在弄乱它们的值,但没有任何可接受的结果。

有没有人可以帮我在风景中画出纹理?

PS:如果我反转 'squareVerticles' 的值,我可以获得 180 度旋转的图片。但我希望纹理旋转 90 度,而不是 180 度。

4

1 回答 1

2

想象一下,您的屏幕具有从-1.0,-1.0(left, bottom) 到的标准化坐标1.0, 1.0。第一个数组指定正方形顶点的坐标(可能是三角形带,因为它们以“Z”方式给出)。

第二个数组指定纹理坐标。同样的事情,除了它们在0.0, 1.0范围内。

因此,顺时针旋转 90 度:

1.0f, 0.0f
0.0f, 0.0f
1.0f, 1.0f
0.0f, 1.0f

逆时针:

0.0f, 1.0f
1.0f, 1.0f
0.0f, 0.0f
1.0f, 0.0f

我希望这行得通!

于 2011-05-26T15:43:09.337 回答