【发布时间】:2012-02-21 15:33:56
【问题描述】:
这里是 ES 2.0 新手。我目前正在尝试使用 ES 2.0 和 PowerVR SDK 从立体图像制作一些 3D 隔行扫描图像。我可以很好地输出一个图像纹理,但是当我尝试输出第二个时,我似乎覆盖了第一个。所以,我的问题是,给定下面的片段着色器,我可以用它来绘制两个纹理,还是 sampler2d 制服只能绑定到一个纹理单元? 这是片段着色器(取自 PowerVR“培训课程”示例程序):
uniform sampler2D sampler2d;\
varying mediump vec2 myTexCoord;\
void main (void)\
{\
gl_FragColor = texture2D(sampler2d,myTexCoord);\
}";
下面是我如何将图像纹理加载到着色器中:
//LEFT IMAGE
glActiveTexture(GL_TEXTURE0);
glGenTextures(1, &m_uiTexture_left);
glBindTexture(GL_TEXTURE_2D, m_uiTexture_left);
glUniform1i(glGetUniformLocation(m_uiProgramObject, "sampler2d"), 0);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, pwr2Width, pwr2Height,0, GL_RGB, GL_UNSIGNED_BYTE, xImageL);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
GLfloat afVertices[30] = {0.0};
genVertices(afVertices);
glGenBuffers(1, &m_ui32Vbo_leftimage);
m_ui32VertexStride = 5 * sizeof(GLfloat); // 3 floats for the pos, 2 for the UVs
glBindBuffer(GL_ARRAY_BUFFER, m_ui32Vbo_leftimage);
glBufferData(GL_ARRAY_BUFFER, 6 * m_ui32VertexStride, afVertices, GL_STATIC_DRAW);
glBindBuffer(GL_ARRAY_BUFFER, 0);
//RIGHT IMAGE
glActiveTexture(GL_TEXTURE1);
glGenTextures(1, &m_uiTexture_right);
glBindTexture(GL_TEXTURE_2D, m_uiTexture_right);
glUniform1i(glGetUniformLocation(m_uiProgramObject, "sampler2d"), 1);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, pwr2Width, pwr2Height,0, GL_RGB, GL_UNSIGNED_BYTE, xImageR);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glGenBuffers(1, &m_ui32Vbo_rightimage);
m_ui32VertexStride = 5 * sizeof(GLfloat); // 3 floats for the pos, 2 for the UVs
glBindBuffer(GL_ARRAY_BUFFER, m_ui32Vbo_rightimage);
glBufferData(GL_ARRAY_BUFFER, 6 * m_ui32VertexStride, afVertices, GL_STATIC_DRAW);
glBindBuffer(GL_ARRAY_BUFFER, 0);
那么,这段代码是否只是覆盖了 sampler2d 制服?第二张图像是否需要另一个制服或着色器?
【问题讨论】:
-
Welp,这很尴尬......我想我已经解决了。阅读此内容后:@ 987654321@,我按照海报“Profet”提到的那样做了,并将 glUniform1i() 调用移到了我的渲染函数中,所以从技术上讲,我仍在覆盖 sampler2d (afaik) 中的值,但是当我做第二个 glUniform1i() 调用并覆盖它,我已经绘制了第一张图像。也许这会对遇到同样问题的人有所帮助,因为我自己进行了大量的谷歌搜索,发现很难找到相关的东西。
-
能否请您给出答案,以便没有人花时间尝试解决方案:)
-
写一个答案而不是评论?当然,我可以做到。 (我是该网站的新手,我不确定回答我自己问题的礼仪是什么)
标签: opengl-es-2.0 textures texture-mapping fragment-shader