Iphone OpenGL ES 2.0使用纹理进行渲染
iphonesdk有一个使用es2.0和一组(顶点和片段)GLSL着色器渲染不同颜色框的示例。有没有关于如何使用此API渲染简单纹理的示例?我基本上想要拿一个四边形,然后在上面画一个纹理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。大多数人发
旧的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 );
}