GLKit多边形半透明

时间:2012-09-14 15:54:32

标签: 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, 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);

提前致谢。

2 个答案:

答案 0 :(得分:1)

你的问题很混乱,但听起来你的透明物体互相吸引?如果是这样,请使用

glEnable(GL_BLEND);
glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA);

而不是你到那里。

并检查深度测试或模板测试(不太可能,但可能)之类的事情并不能阻止绘制内容......

答案 1 :(得分:1)

问题是我之前在某个地方有过glEnable(GL_DEPTH_TEST),它在alpha 0.5处停止了两个多边形,创建了一个alpha 1.0的交叉点。