2012-05-17 10 views
12

क्या कोई GLKView पारदर्शी पृष्ठभूमि बनाने का कोई तरीका है? मैंने here समाधान का प्रयास किया है लेकिन यह मेरे लिए काम नहीं कर रहा है।ओपनजीएल ईएस 2.0 जीएलकिट पारदर्शी पृष्ठभूमि के साथ

* संपादित करें: मुझे इसे पूरी तरह पारदर्शी बनाने में सहायता चाहिए। पृष्ठभूमि ज्यादातर सफेद और भूरे रंग की है, लेकिन मैंने इसे और अधिक जीवंत रंगों के साथ परीक्षण किया है, और सुनिश्चित करें कि आप पृष्ठभूमि के माध्यम से अस्पष्ट रूप से देख सकते हैं। कोई विचार यह आंशिक रूप से पारदर्शी क्यों होगा लेकिन निम्नलिखित कोड के साथ पूरी तरह से नहीं?

- (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] के पृष्ठभूमि रंग की स्थापना और eaglLayer की स्थापना अपारदर्शी नहीं होने की कोशिश की है:

यहाँ मेरे विचार नियंत्रक में कोड है। बिल्ली, मैंने eaglLayer की पृष्ठभूमि को colColorRef को 0 अस्पष्टता के साथ सेट करने का भी प्रयास किया।

+2

क्या आप वाकई दृश्य चित्रकला के समय दृश्य पृष्ठभूमि भर नहीं रहे हैं? मुझे पता है कि यह मूर्खतापूर्ण लगता है लेकिन मैंने देखा है कि उन लोगों के साथ ऐसा होता है जो एक ही काम करने की कोशिश कर रहे थे। – mprivat

+0

मैं इसके साथ पूरी तरह से नया हूं, इसलिए यह संभव है, लेकिन मुझे 99% यकीन है कि मैं केवल एक लाइन स्ट्रिप खींच रहा हूं। स्पष्ट रंग 0.0f का अल्फा सेट करने के लिए सेट है, लेकिन मैंने यह भी देखा है कि अगर मैं उन अक्षरों को खींचने का प्रयास करता हूं जिनके रंग गुण अल्फा को 0.0f पर सेट करते हैं, तो वे अभी भी आकर्षित करते हैं। क्या इससे आपको कोई समझ/मदद मिलती है? – prplehaze

+3

एक टिप्पणी जो मैं यहां कर सकता हूं वह यह है कि यदि आप कर सकते हैं तो मैं एक गैर-ओपेक ओपनजीएल ईएस होस्टिंग व्यू का उपयोग करने से बचूंगा। यह सामान्य ओपेक ओपनजीएल ईएस व्यू की तुलना में आपके प्रतिपादन को नाटकीय रूप से धीमा कर देगा। यदि आप कर सकते हैं, तो उस पृष्ठभूमि सामग्री को खींचें जिसे आप अपने ओपनजीएल ईएस दृश्य में प्रस्तुत करना चाहते हैं और इसे सभी को अपारदर्शी दृश्य में प्रस्तुत करना चाहते हैं। –

उत्तर

15

ठीक है, मुझे लगता है कि नहीं इस बात होगी क्योंकि अल्फा 0.0f पर पहले से ही था, लेकिन जब मैं

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

बदल

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

को यह पृष्ठभूमि पूरी तरह से पारदर्शी बनाया।

आपके सुझावों और सहायता के लिए सभी को धन्यवाद!

view.opaque = NO 
निश्चित रूप से पारदर्शिता के साथ glClearColor कॉल के अलावा

:

+1

मैं वही चीज़ देख रहा हूं - जब तक कि स्पष्ट रंग सभी शून्य नहीं है, यह वास्तव में जिस तरह से मैं अपेक्षा करता हूं उसे मिटा नहीं दूंगा। अच्छा लगता है! –

+4

यह सिर्फ पृष्ठभूमि को काला बनाता है, पारदर्शी नहीं – zurbergram

+1

यह तब तक काला होगा जब तक आप स्पष्ट रूप से दृश्य की परत अपारदर्शी संपत्ति को प्रश्न के कोड स्निपेट में ऊपर दिखाए गए अनुसार नहीं सेट करते हैं। – tlbrack

6

मेरे लिए यह दृश्य अपारदर्शी नहीं बनाने में मदद की।

0.5f की एक ट्रांसपरेंसी पूरी तरह से आधा अस्पष्टता के साथ एक और UIImageview पर पृष्ठभूमि को मिश्रित करती है।

संबंधित मुद्दे