【问题标题】:Using GLKit and OpenGL-ES, How To Draw Two Triangles, One Textured, Another Solid使用 GLKit 和 OpenGL-ES,如何绘制两个三角形,一个有纹理,另一个是实体
【发布时间】:2013-01-18 17:57:44
【问题描述】:

我是 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,所以没有着色器或任何类似的东西。

截图如下:

任何想法都非常感谢。

【问题讨论】:

    标签: ios opengl-es glkit


    【解决方案1】:

    在 OpenGL 中无法渲染的原因可能有很多。例如,我想知道您是否正在使用错误的绕组(顺时针与逆时针)设置第二个三角形。

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

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-06-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多