Có cách nào để làm cho nền của GLKView trong suốt không? Tôi đã thử các giải pháp here nhưng điều đó không làm việc cho tôi.OpenGL ES 2.0 GLKit với nền trong suốt
* CHỈNH SỬA: Tôi cần trợ giúp làm cho nó hoàn toàn trong suốt. Nền chủ yếu là màu trắng và xám, nhưng tôi chỉ thử nghiệm nó với nhiều màu sắc sống động hơn, và chắc chắn bạn có thể nhìn qua một cách mơ hồ. Bất kỳ ý tưởng tại sao nó sẽ được một phần minh bạch nhưng không hoàn toàn với các mã sau đây?
Dưới đây là mã trong bộ điều khiển quan điểm của tôi:
- (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);
}
Tôi đã thử đặt backgroundColor của thành [UIColor clearColor] và thiết lập eaglLayer để không bị mờ đục. Heck, tôi thậm chí đã cố gắng thiết lập backgroundColor của eaglLayer thành CGColorRef với 0 opacity.
Bạn có chắc chắn rằng bạn không làm đầy bối cảnh cảnh tại thời điểm vẽ tranh không? Tôi biết nó nghe có vẻ ngốc nghếch nhưng tôi đã thấy điều đó xảy ra với những người đang cố gắng làm điều tương tự. – mprivat
Tôi hoàn toàn mới với điều này, vì vậy nó có thể, nhưng tôi 99% chắc chắn tôi chỉ vẽ một dải đường. Màu sắc rõ ràng được thiết lập để có alpha là 0,0f, nhưng tôi thậm chí còn nhận thấy nếu tôi cố gắng vẽ các đỉnh có thuộc tính màu sắc đặt alpha thành 0.0f, chúng vẫn vẽ. Điều đó có ý nghĩa gì không/giúp bạn động não? – prplehaze
Một bình luận tôi có thể làm ở đây là tôi sẽ tránh sử dụng chế độ xem lưu trữ OpenGL ES không mờ đục nếu bạn có thể. Điều này sẽ làm chậm đáng kể hiển thị của bạn so với chế độ xem OpenGL ES mờ đục bình thường. Nếu bạn có thể, hãy kéo nội dung nền mà bạn muốn kết xuất trong khung cảnh OpenGL ES và hiển thị tất cả nội dung đó thành chế độ xem mờ. –