Iphone OpenGL ES 2.0使用纹理进行渲染

Iphone OpenGL ES 2.0使用纹理进行渲染,iphone,opengl-es,glsl,shader,Iphone,Opengl Es,Glsl,Shader,iphonesdk有一个使用es2.0和一组(顶点和片段)GLSL着色器渲染不同颜色框的示例。有没有关于如何使用此API渲染简单纹理的示例?我基本上想要拿一个四边形,然后在上面画一个纹理 旧的ES1.1API已经不起作用了,所以我需要一些帮助。大多数着色器引用主要讨论高级着色主题,但我真的不确定如何告诉着色器使用绑定纹理,以及如何引用UV。您是否尝试过类似或的“普通”OpenGL教程?这也适用于OpenGL ES。不幸的是,OpenGL ES 2.0使用了GLSL的红头继代版本1.4。大多数人发

iphonesdk有一个使用es2.0和一组(顶点和片段)GLSL着色器渲染不同颜色框的示例。有没有关于如何使用此API渲染简单纹理的示例?我基本上想要拿一个四边形,然后在上面画一个纹理


旧的ES1.1API已经不起作用了,所以我需要一些帮助。大多数着色器引用主要讨论高级着色主题,但我真的不确定如何告诉着色器使用绑定纹理,以及如何引用UV。

您是否尝试过类似或的“普通”OpenGL教程?这也适用于OpenGL ES。

不幸的是,OpenGL ES 2.0使用了GLSL的红头继代版本1.4。大多数人发布的教程在此版本下不起作用。已删除所有辅助变量,如ftTransform和gl_TexCoord[0]。很难找到比纯粹的基础知识更深入的特定ES 2.0教程

OpenGLES2.0是一个完全可编程的管道,他们已经放弃了任何固定的功能。如果您想使用它,您必须提供自己的矩阵,以跟踪以前的模型视图和投影矩阵


我知道你几个月前发过帖子,但如果有人还在寻找信息,请在opengl.org上搜索任何与opengl3.0相关的信息。有许多好的源代码版本是半适用的。那里的论坛也是一个很好的信息来源。

网站上有一个很好的教程,与本书一起提供。本书中的示例都在

第九章,简单纹理2D正是你想要的。它设置一个着色器,用于对纹理进行采样、初始化并使用纹理对三角形进行着色

着色器程序接近于:

varying vec2 v_texCoord;
uniform sampler2D s_texture;
void main() {
  gl_FragColor = texture2D(s_texture, v_texCoord);
}
然后你就这样设置了它:

glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, userData->textureId);
// Set the sampler texture unit to 0
glUniform1i(userData->samplerLoc, 0);
glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_SHORT, indices);

但是,请参阅我上面给出的链接中的实际代码,以真正了解示例。

以下是我可以制作的最简单的版本:


设置(在完成顶点数组的GLVertexAttribute指针后立即进行)


Render(调用GLDrawArray或类似程序之前的最后一件事)


纹理着色器:

attribute vec4 position;
attribute vec2 a_textureCoordinate;

varying vec2 v_textureCoordinate;

uniform mat4 modelViewProjectionMatrix;
uniform mat3 normalMatrix;

void main()
{
    v_textureCoordinate = a_textureCoordinate;
    gl_Position = modelViewProjectionMatrix * position;
}

片段着色器:

uniform sampler2D s_texture;
varying mediump vec2 v_textureCoordinate;

void main(void)
{
    gl_FragColor = texture2D( s_texture, v_textureCoordinate );
}

你说“旧的ES 1.1 API不再工作”是什么意思?我使用的是GL ES 1.1,工作得很好。我的意思是,你不能只是在ES 2.0初始化的上下文中加入ES 1.1函数调用。。当然,您可以初始化ES1.1并使用它,但您将无法使用着色器这只是半个答案。您需要解释什么是userData等。我来这里是因为我已经有了那本书,而作者们到了纹理这一章就放弃了;书中的代码质量直线下降,解释变得简洁而过时(重点放在GL 1而不是GL 2等)。最终,你不得不把这本书扔进垃圾桶,从网上下载源代码,在没有作者帮助的情况下设法弄明白。当你在ipad上冲浪时,这没有任何帮助:(.c.f.我下面的答案,我最终找到了所有缺失的部分。完整的代码如下…”GlenableVertexAttributeArray(0);GlenableVertexAttributeArray(1);“任何使用硬编码数字而不是将其存储在变量(由ogl分配)中的书)是一本我会远离的书。谁知道他们还想教什么样的坏东西。
attribute vec4 position;
attribute vec2 a_textureCoordinate;

varying vec2 v_textureCoordinate;

uniform mat4 modelViewProjectionMatrix;
uniform mat3 normalMatrix;

void main()
{
    v_textureCoordinate = a_textureCoordinate;
    gl_Position = modelViewProjectionMatrix * position;
}
uniform sampler2D s_texture;
varying mediump vec2 v_textureCoordinate;

void main(void)
{
    gl_FragColor = texture2D( s_texture, v_textureCoordinate );
}