Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/44.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 具有透明背景的OpenGL ES 2.0 GLKit_Iphone_Ios_Opengl Es_Glkit - Fatal编程技术网

Iphone 具有透明背景的OpenGL ES 2.0 GLKit

Iphone 具有透明背景的OpenGL ES 2.0 GLKit,iphone,ios,opengl-es,glkit,Iphone,Ios,Opengl Es,Glkit,有没有办法使GLKView的背景透明?我尝试过这个解决方案,但对我来说不起作用 *编辑:我需要帮助使它完全透明。背景大部分是白色和灰色,但我只是用更鲜艳的颜色测试了一下,你肯定可以模糊地看到背景。你知道为什么用下面的代码部分透明但不完全透明吗 以下是我的视图控制器中的代码: - (void)viewDidLoad { [super viewDidLoad]; self.context = [[[EAGLContext alloc] initWithAPI:kEAGLRender

有没有办法使GLKView的背景透明?我尝试过这个解决方案,但对我来说不起作用

*编辑:我需要帮助使它完全透明。背景大部分是白色和灰色,但我只是用更鲜艳的颜色测试了一下,你肯定可以模糊地看到背景。你知道为什么用下面的代码部分透明但不完全透明吗

以下是我的视图控制器中的代码:

- (void)viewDidLoad
{
    [super viewDidLoad];

    self.context = [[[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2] autorelease];
    CAEAGLLayer *eaglLayer = (CAEAGLLayer *)self.view.layer;
    eaglLayer.opaque = NO;

    if (!self.context) {
       NSLog(@"Failed to create ES context");
    }

    GLKView *view = (GLKView *)self.view;
    view.context = self.context;

    view.backgroundColor = [UIColor clearColor];

    view.drawableDepthFormat = GLKViewDrawableDepthFormat24;

    [self setupGL];
}

- (void)setupGL
{
    [EAGLContext setCurrentContext:self.context];

    self.effect = [[[GLKBaseEffect alloc] init] autorelease];
    self.effect.light0.enabled = GL_FALSE;
    self.effect.light0.diffuseColor = GLKVector4Make(1.0f, 0.4f, 0.4f, 0.0f);
    self.effect.light0.ambientColor = GLKVector4Make(1.0f, 0.4f, 0.4f, 0.0f);

    glDisable(GL_DEPTH_TEST);

    glGenVertexArraysOES(1, &_vertexArray);
    glBindVertexArrayOES(_vertexArray);

    glGenBuffers(1, &_vertexBuffer);
    glBindBuffer(GL_ARRAY_BUFFER, _vertexBuffer);
    glBufferData(GL_ARRAY_BUFFER, sizeof(vertexData), vertexData, GL_DYNAMIC_DRAW);

    glEnableVertexAttribArray(GLKVertexAttribPosition);
    glVertexAttribPointer(GLKVertexAttribPosition, VERTEX_POS_DATA_SIZE, GL_FLOAT, GL_FALSE, VERTEX_DATA_SIZE * sizeof(GLfloat), BUFFER_OFFSET(0));

    glEnableVertexAttribArray(GLKVertexAttribColor);
    glVertexAttribPointer(GLKVertexAttribColor, VERTEX_COLOR_DATA_SIZE, GL_FLOAT, GL_FLOAT, VERTEX_DATA_SIZE * sizeof(GLfloat), BUFFER_OFFSET(VERTEX_POS_DATA_SIZE * sizeof(GLfloat)));    

    glLineWidth(10.0);
}

- (void)glkView:(GLKView *)view drawInRect:(CGRect)rect
{
    if (!needsRedraw) return;
    needsRedraw = NO;

    glClearColor(0.65f, 0.65f, 0.65f, 0.0f);
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    [self.effect prepareToDraw];

    glDrawArrays(GL_LINE_STRIP, 0, vertexCount);    
}

我已经尝试将背景色设置为[UIColor clearColor],并将EagleLayer设置为不透明。见鬼,我甚至尝试将EagleLayer的背景色设置为CGColorRef,不透明度为0

嗯,我不认为这有什么关系,因为阿尔法已经是0.0f了,但当我改变时

glClearColor(0.65f, 0.65f, 0.65f, 0.0f);

它使背景完全透明


谢谢大家的建议和帮助

对我来说,这有助于使视图不不透明:

view.opaque = NO
除了glClearColor调用外,当然还有透明性


透明度为0.5f时,另一个UIImageview上的背景完全混合为半不透明。

绘制场景时,您确定没有填充场景背景吗?我知道这听起来很愚蠢,但我也见过有人尝试做同样的事情。我对这个完全陌生,所以这是可能的,但我99%确定我只画了一条线。“透明颜色”设置为alpha为0.0f,但我甚至注意到,如果我尝试绘制颜色属性将alpha设置为0.0f的顶点,它们仍然会绘制。这有什么意义/帮助你进行头脑风暴吗?我在这里可能会说的一点是,如果可以的话,我会避免使用非不透明的OpenGL ES宿主视图。与普通不透明的OpenGL ES视图相比,这将显著降低渲染速度。如果可以的话,把你想在OpenGL ES场景中渲染的背景内容拉过来,然后渲染到一个不透明的视图中。布拉德,我真的试着创造性地避免这种情况,但是,唉,我想不出一种解决透明度问题的方法。我有一个动态内容的视图,用户可以拖放它,我需要这个GLKView来允许他们绘制。即使拍摄一张屏幕截图并将其用作背景也不起作用,因为一旦他们关闭绘图,绘图需要保留,但下面的内容是动态的。我只是渲染线条,所以在渲染方面并不繁重。有什么想法吗?具有讽刺意味的是,事实上,正是你在cocoaconf上的演讲让我决定尝试OpenGL。没有压力:)是的,这可能是你唯一的选择。有时候,这是不可避免的。对于用户界面元素顶部的二维图形,您甚至可能没有注意到减速。只有当你进入更强烈的渲染时,这才变得明显。最坏的情况,试试看。这只是在分析时要注意的一点。我看到了同样的情况——除非clearColor都是零,否则它实际上不会以我期望的方式擦除。好发现!这只会使背景变黑,而不是透明。除非您在问题的代码片段中将视图的“图层不透明”属性显式设置为“否”,否则背景将变黑。为了清楚起见,您需要:
opaque=NO
backgroundColor=[UIColor clearColor]
glClearColor(0,0,0)
。尝试在IE builder中将“不透明”设置为“否”,但无效-仅在代码中有效。有人知道可能是什么问题吗?
view.opaque = NO