使用GLKit和OpenGL-ES,如何绘制两个三角形,一个纹理,另一个实体

时间:2013-01-18 17:57:44

标签: ios opengl-es glkit

我是OpenGL-ES的新手,已经开始研究Buck的Learning OpenGL ES for iOS书。

第2章介绍了使用纯色绘制三角形,第3章继续使用纹理。

作为个人学习练习,我试图改变示例代码以绘制两个三角形;一个是纹理,另一个是实体。

看起来像是一个非常基本的练习,但是 - 作为OpenGL-ES初学者 - 证明是棘手的。

到目前为止,我尝试过各种各样的事情。

首先,我准备使用GLKVertexAttribPosition,然后GLKVertexAttribTexCoord0进行绘制。然后我用三角形1绘制顶点缓冲区。

接下来,我尝试了几件事,包括:

    glDisableVertexAttribArray(GLKVertexAttribTexCoord0);

    GLuint name = self.textureInfo0.name;
    glDeleteTextures(1, &name);

然后绘制颜色属性:

[self.vertexBuffer prepareToDrawWithAttrib:GLKVertexAttribColor
                       numberOfCoordinates:3
                              attribOffset:offsetof(SceneVertex, colours)
                              shouldEnable:YES];

您可以在屏幕截图中看到左下角三角形的纹理与顶点颜色属性混合在一起。正方形三角形 - 正方形 - 完全是黑色。

请注意,prepareToDrawWithAttrib方法调用是Buck的实用程序类,主要调用glVertexAttribPointer方法。

重要的是要注意我在这里使用GLKit,所以没有着色器或任何东西。

这是截图:

enter image description here

任何想法都非常感激。

2 个答案:

答案 0 :(得分:0)

可能有很多原因导致事物无法在OpenGL中呈现。例如,我想知道你是否设置了错误绕组的第二个三角形(顺时针与逆时针)。

我会尝试在两个三角形之间切换颜色/纹理,看看你是否可以在第二个三角形上获得纹理。

否则,在您的示例中没有更多代码,很难说。

答案 1 :(得分:0)

如果你开始使用openGLES,我的一个建议就是避免使用库(比如Buck的实用程序类)。你必须清楚自己在做什么。不要在GLKBaseEffect上浪费你的时间。

启动Xcode opengles项目。删除所有GLKBaseEffect部分并开始使用着色器,在进行简单照明时并不难。