在UIImageView上显示带透明背景的EAGLView

erk*_*diz 3 iphone 3d opengl-es objective-c

我有一个显示OpenGL 3D模型的EAGLView和一个显示图像的UIImageView.



我想要的是在透明背景的UIImageView上方显示EAGLView.

有没有办法在UIImageView上显示具有透明背景的3D模型.

任何解决方案将不胜感激.

Ada*_*dam 11

作为参考,大多数接受的答案是不必要的.唯一的关键部分是这个(在UIViewController中 - 无需编辑或子类化EAGLView/GLKView):

self.view.opaque = NO; // NB: Apple DELETES THIS VALUE FROM NIB
self.view.backgroundColor = [UIColor clearColor]; // Optional: you can do this in NIB instead
Run Code Online (Sandbox Code Playgroud)

您可以在NIB中设置背景颜色 - 但是您无法设置不透明度(Apple似乎在initWithCoder上覆盖GL视图的此var :()

另外,当然,在您的OpenGL代码中,您需要清除alpha = 0.0.因此,无论您的glClear/glClearColor调用已经在哪里,请将clearColor替换为:

glClearColor( 0, 0, 0, 0.0);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
Run Code Online (Sandbox Code Playgroud)


erk*_*diz 8

这是我找到的解决方案:

在EAGLView.m初始化

self.opaque = NO;
self.backgroundColor = [UIColor clearColor];

CAEAGLLayer *eaglLayer = (CAEAGLLayer *)self.layer;
eaglLayer.opaque = NO;

CGColorSpaceRef rgb = CGColorSpaceCreateDeviceRGB();
const CGFloat myColor[] = {0.0, 0.0, 0.0, 0.0};
eaglLayer.backgroundColor = CGColorCreate(rgb, myColor);
CGColorSpaceRelease(rgb);
Run Code Online (Sandbox Code Playgroud)