繁体   English   中英

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

[英]Using GLKit and OpenGL-ES, How To Draw Two Triangles, One Textured, Another Solid

我是OpenGL-ES的新手,已经开始通过Buck的iOS版OpenGL ES学习手册开始工作。

第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 ,因此没有着色器或任何其他东西。

这是屏幕截图:

在此处输入图片说明

任何想法表示赞赏。

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

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

否则,很难在示例中添加更多代码。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM