更改样本中的OpenGL顶点属性

时间:2011-05-26 15:21:25

标签: c ios opengl-es shader vertex

我正在使用this tutorial / sample在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度角的相机。

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

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

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

1 个答案:

答案 0 :(得分:2)

想象一下,您的屏幕具有从-1.0,-1.0(左,下)到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

我希望有效!