Opengl es 为什么不';对GLDrawArray的重复调用是否在iOS上的GLKView中绘制?
我正在尝试在iOS上的GLKView中使用glDrawArrays重新绘制相同的数组。当我注释掉这两个调用中的任意两个时,另一个draw调用将按照我的预期进行绘制。我的最后一个预感是,我试图以相同的深度绘制,因此我引入了一个统一的深度,并在顶点着色器中设置深度,如下所示:Opengl es 为什么不';对GLDrawArray的重复调用是否在iOS上的GLKView中绘制?,opengl-es,glsl,glkview,Opengl Es,Glsl,Glkview,我正在尝试在iOS上的GLKView中使用glDrawArrays重新绘制相同的数组。当我注释掉这两个调用中的任意两个时,另一个draw调用将按照我的预期进行绘制。我的最后一个预感是,我试图以相同的深度绘制,因此我引入了一个统一的深度,并在顶点着色器中设置深度,如下所示: gl_Position = vec4(position.xy, 0.1*depth, 1.0); gl_FragColor = vec4(rgb, texture2D(wheelMask, texCoord).a); 输入
gl_Position = vec4(position.xy, 0.1*depth, 1.0);
gl_FragColor = vec4(rgb, texture2D(wheelMask, texCoord).a);
输入的深度是一个值为0、1或2的lowp向量。这没有任何效果
这是我的drawRect:method
- (void)drawRect:(CGRect)rect
{
glClearColor(0., 0.0, 0.0, 0.0f);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
// Render the object again with ES2
glUseProgram(_program);
// the colors
glBindVertexArrayOES(_vertexArray);
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, _wheelMaskTexture);
glUniform1i(uniforms[UNIFORM_TEXTURE], 0);
glUniform1f(uniforms[UNIFORM_COLOR_DEPTH], COLOR_DRAW);
glUniform1f(uniforms[UNIFORM_COLOR_ANGLE], _angle);
glDrawArrays(GL_TRIANGLES, 0, 6);
// the sat
glBindVertexArrayOES(_vertexArray);
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, _satMaskTexture);
glUniform1i(uniforms[UNIFORM_TEXTURE], 0);
glUniform1i(uniforms[UNIFORM_COLOR_DEPTH], SATURATION_DRAW);
glUniform1f(uniforms[UNIFORM_COLOR_ANGLE], _satAngle);
glDrawArrays(GL_TRIANGLES, 0, 6);
// the bright
glBindVertexArrayOES(_vertexArray);
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, _brightMaskTexture);
glUniform1i(uniforms[UNIFORM_TEXTURE], 0);
glUniform1i(uniforms[UNIFORM_COLOR_DEPTH], BRIGHTNESS_DRAW);
glUniform1f(uniforms[UNIFORM_COLOR_ANGLE], _brightnessAngle);
glDrawArrays(GL_TRIANGLES, 0, 6);
}
我的GLKView是用drawableDepthFormat=GLKViewDrawableDepthFormat24
设置的。我没有设置任何变换,因为我画的基本上是一个简单的色轮
没有世界或模型变换。我只是简单地把同一个正方形一个接一个地画三次,而没有变换。有3种不同的遮罩图像用于遮罩我在片段着色器中关心的片段,如下所示:
gl_Position = vec4(position.xy, 0.1*depth, 1.0);
gl_FragColor = vec4(rgb, texture2D(wheelMask, texCoord).a);
为什么这三个
gldrawArray
调用不能按预期绘制?正如我前面提到的,他们中的任何一个人都会像预期的那样画画。事实上,对于所有三个,只有第一个glDrawArrays
按预期绘制。这很奇怪。你可以试着禁用深度测试吗?谢谢,@MaticOblak我试着禁用深度测试(将glEnable(Glu depth\u test)
更改为glDisable(Glu depth\u test)
,但没有成功。它仍然在绘制深度最低的项目(最小的v坐标)。