2009-09-08 16 views
10

Pracuję nad aplikacją na iPhone'a i mam renderowanie widoku OpenGL na zwykłym UIView. Działa, ale nie mogę uzyskać widoku OpenGL, aby mieć przezroczyste tło, które pokazuje UIView pod spodem. Zamiast tego dostaję duże czarne pudełko.iPhone: Układanie przezroczystego widoku OpenGL na UIView?

Próbowałem ustawić kolor tła na UIColor clearColor, ustawiłem opaque na NIE, ustawiłem glClearColor na 0.0,0.0,0,0,0.0.

Myślę, że nieporozumienie/niewłaściwe użycie czegoś związanego z trybami mieszania, ale nie jestem pewien. Czy ktoś może mi podać przykładowy kod, który pokazuje, jak to zrobić?

Z góry dziękuję.

+0

Czy kiedykolwiek dostać tę pracę? Mam podobny problem. Używam kEAGLColorFormatRGBA8 w drawableProperties. – westsider

Odpowiedz

11

Oto, co musiałem zrobić, aby uzyskać to do pracy:

eaglLayer.opaque = NO;  
eaglLayer.drawableProperties = [NSDictionary dictionaryWithObjectsAndKeys: 
           kEAGLColorFormatRGBA8, kEAGLDrawablePropertyColorFormat, nil]; 
glClearColor(0.0f, 0.0f, 0.0f, 0.0f); 

I okrywać robisz to, co robię i starają się przetestować go z demo GLGravity, nie ma innego wywołanie glClearColor(0.0f, 0.0f, 0.0f, 1.0f); każdego czas nazywa się drawView - więc koniecznie zmień to na glClearColor(0.0f, 0.0f, 0.0f, 0.0f);! :)

+1

Znalazłem "drawableProperties" było zbędne w iOS 5 i powyżej – Adam

+0

JEDNAK ... Chcę zaznaczyć, że MUSISZ zadzwonić "opaque = NO" w "viewDidLoad" lub podobnym - jeśli ustawisz go w pliku NIB, Apple w trybie cichym zastępuje go w czasie wykonywania (zło!) – Adam

2

Sprawdź format kolorów swojego widoku. Jeśli ustawisz go na kEAGLColorFormatRGB565 ze słownika drawableProperties, kanał alfa zawartości widoku będzie domyślnie traktowany jako 1.0, niezależnie od tego, co narysujesz.

4

Dodaj te w EAGLView.m

-(id)initWithCoder:(NSCoder*)coder 

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); 
Powiązane problemy