[英]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.