Objective c GLKit多边形半透明性

Objective c GLKit多边形半透明性,objective-c,ios,opengl-es,opengl-es-2.0,glkit,Objective C,Ios,Opengl Es,Opengl Es 2.0,Glkit,我正在尝试使用GLKit绘制半透明多边形,但运气不好。所以我想知道是否有可能在GLKit中首先使用半透明多边形,因为我知道OpenGL的标准实现不支持它;但可以使用自定义着色器进行模拟。但由于GLKit编译自己的着色器,我需要知道是应该继续使用GLKit还是使用自己的自定义着色器。我的代码如下: // setup states glEnable(GL_BLEND); glBlendFuncSeparate(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_ONE,

我正在尝试使用GLKit绘制半透明多边形,但运气不好。所以我想知道是否有可能在GLKit中首先使用半透明多边形,因为我知道OpenGL的标准实现不支持它;但可以使用自定义着色器进行模拟。但由于GLKit编译自己的着色器,我需要知道是应该继续使用GLKit还是使用自己的自定义着色器。我的代码如下:

// setup states
glEnable(GL_BLEND);
glBlendFuncSeparate(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_ONE, GL_ONE_MINUS_SRC_ALPHA);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

self.effect.texture2d0.enabled   = GL_FALSE;
self.effect.colorMaterialEnabled = GL_TRUE;
self.effect.transform.modelviewMatrix = self.modelMatrix;

glEnableVertexAttribArray(GLKVertexAttribPosition);
glEnableVertexAttribArray(GLKVertexAttribColor);

[self.effect prepareToDraw];

// draw triangles
glVertexAttribPointer(GLKVertexAttribPosition, 3, GL_FLOAT, GL_FALSE, sizeof(LineVertex), &_vertices[0].pos);
glVertexAttribPointer(GLKVertexAttribColor, 4, GL_FLOAT, GL_FALSE, sizeof(LineVertex), &_vertices[0].color);

glDrawArrays(GL_TRIANGLES, 0, _vertexCount);

提前谢谢。

您的问题让人困惑,但听起来好像是透明对象在彼此之间绘制?如果是这种情况,请使用

glEnable(GL_BLEND);
glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA);
而不是你得到的


并检查深度测试或模板测试(不太可能但可能)是否不会阻止绘制东西…

问题是,我之前在某处进行了glEnable(GL_depth_TEST),它在alpha 0.5处阻止了两个多边形与alpha 1.0相交。

你的明确意思是,或透明?半透明-我知道如何使多边形不透明或透明;但我不知道如何让它有0.5 alpha。问题的真正根源在于两个0.5 alpha多边形相互重叠,不会产生1.0 alpha相交。透明并不意味着不可见,事物可以部分透明。半透明意味着半透明对象后面的灯光模糊或扩散。在OpenGL中,半透明可能是一种很难实现的技术,而透明(完全或部分)得到了很好的支持。你所描述的问题听起来像是透明度问题。谢谢蒂姆给我指明了正确的方向;将在一些研究之后更新此帖子