2012-11-12 13 views
9

मैं ओपनगलएस सीख रहा हूं और मैं एक ULiewController के अंदर एक GLKViewer डालने की कोशिश कर रहा हूं।glkView drawInRect

मुझे पता है कि मैं GLViewController का उपयोग कर मुख्य मुद्दों के आसपास आ सकता हूं, लेकिन मैं यह सीखने की कोशिश कर रहा हूं कि इसे कैसे करें।

मैं इस सवाल का, Nesting GLKView into UIViewController और Nested GLKView and GLKViewController पाया, लेकिन मैं कुछ कमी किया जाना चाहिए, भले ही मुझे लगता है कि मैं सब सही कदम कर रहा हूँ क्योंकि जब मैं अपने प्रोजेक्ट को चलाने, मैं drawInRect प्रिंट लाइन के लिए नहीं मिल रहा है।

स्टोरीबोर्ड में मैं व्यू कंट्रोलर को glkview घटक के प्रतिनिधि के रूप में इंगित कर रहा हूं।

मैं कोड के रूप में सरल संभव रखने की कोशिश की और कोई मदद apreciated हो जाएगा:

MyController.h

#import <Foundation/Foundation.h> 
#import <GLKit/GLKit.h> 

@interface MyGLController : UIViewController <GLKViewDelegate> 
{ 
    GLuint vertexBufferID; 

} 

@property (weak, nonatomic) IBOutlet GLKView *glview; 

@property (strong, nonatomic) GLKBaseEffect *baseEffect; 

@end 

MyGLController.m

#import "MyGLController.h" 

@implementation MyGLController 

//@synthesize baseEffect; 

-(void) viewDidLoad{ 
    [super viewDidLoad]; 

    self.glview.context = [[EAGLContext alloc] initWithAPI: 
    kEAGLRenderingAPIOpenGLES2]; 

    [EAGLContext setCurrentContext:self.glview.context]; 
    printf("View Loaded"); 
} 


- (void)glkView:(GLKView *)view drawInRect:(CGRect)rect 
{ 
    printf("DrawInRect"); 
} 

@end 

* अद्यतन *

जहां तक ​​मेरा बता सकते हैं glkview ठीक से झुका है के रूप में प्रति सुझाव और जोश-नैप जोड़ा गया है और setNeedsDisplay कहा जाता है।

मामले में वहाँ कुछ मुझे याद आ रही है, मैं परियोजना यहां की एक प्रति अपलोड कर दिया है: https://github.com/jcrogel/OpenGLDebug.git

मैं इस में कुल noob हूँ तो मैं किसी भी मूर्खतापूर्ण निरीक्षण :)

+0

ठीक है मैंने देखा है कि मुझे प्रश्न में गलत क्या है या मेरा प्रश्न बेहतर कैसे होगा, इसके बारे में और स्पष्टीकरण के बिना मुझे 'करीबी' वोट और 2 वोट प्राप्त हुए हैं। मेरे अंक हासिल करने के लिए कोई प्रतिक्रिया की सराहना की जाएगी। –

+2

मुझे लगता है कि डाउनवॉटर को इसके कारण को अंधेरे से चिह्नित करने के बजाय उनके कारण की व्याख्या करनी चाहिए। ओपी ने स्पष्ट रूप से एक स्पष्टीकरण और कोड दोनों प्रदान करने के लिए एक प्रयास किया। लापता जानकारी का अनुरोध करने वाली एक साधारण टिप्पणी में मदद मिलेगी। – jdi

+1

मेरे लिए, मैंने एक संदर्भ के साथ शुरुआत नहीं की थी और यही कारण है कि इसे नहीं कहा गया था। –

उत्तर

9

आप नहीं था के लिए माफी माँगता ' टी कहते हैं कि आपने स्टोरीबोर्ड में MyGLController की ग्लेव्यू प्रॉपर्टी को झुकाया है, इसलिए इसे सत्यापित करें।

अगला, आप लोड होने के बाद ग्लेव्यू संदर्भ स्थापित कर रहे हैं। एक GLKViewController के बिना, उस ग्लेव्यू को कुछ भी नहीं बता रहा है जिसे इसे खींचा जाना चाहिए। सुनिश्चित करें कि संदर्भ स्थापित होने के बाद आप कहीं भी [self.glview setNeedsDisplay] पर कॉल करें।

+0

धन्यवाद मैंने यह कोशिश की लेकिन यह काम नहीं किया, मैंने अतिरिक्त जानकारी और जिथब रेपो के लिंक को अपडेट किया है जिसे मैंने प्रोजेक्ट के साथ जोड़ा –

+0

बस स्पष्ट करने के लिए, मुझे जो कॉल करना था वह था: self.glview.setNeedsDisplay = हाँ; –

+2

यह होना चाहिए: self.glview.enableSetNeedsDisplay = हाँ; – inwit

1

मुझे लगता है कि यह प्रश्न पहले से ही उत्तर दिया गया था। लेकिन एक अलग समाधान के साथ, मुझे एक ही समस्या थी। मैंने सोचा कि मैं जानकारी को यहां बंद कर दूंगा क्योंकि दूसरों को इससे फायदा हो सकता है।

समस्या विवरण

जबकि GLKView और GLKViewController का उपयोग कर, पाश प्रस्तुत करना समारोह (drawInRect) एक बार कहा जाता है, लेकिन फिर से नहीं कहा जाता है।

संभावित कारण

CViewController के कुछ तरीकों को अपने अंधविश्वासों बुला बिना गलत ढंग से लागू किया गया है। निम्नलिखित कोड तीन ऐसे कार्यों को दिखाता है। नीचे दिए गए उदाहरणों में तीन कार्यों को सही ढंग से कार्यान्वित किया गया है, जो उनके सुपरर्स को बुलाते हैं।

-(void)viewWillAppear:(BOOL)animated { 
    [super viewWillAppear:NO]; 
} 

-(void)viewDidAppear:(BOOL)animated { 
    [super viewDidAppear:NO]; 
} 
-(void)viewWillDisappear:(BOOL)animated { 
    [super viewWillDisappear:NO]; 
} 
6

मुझे एक ही समस्या थी।

डिफ़ॉल्ट रूप से, xcode enable setNeedsDisplay चेकबॉक्स NOGLKView संपत्ति सूची में सेट करता है।
एक बार मैंने इसे बदल दिया, यह काम किया।

+0

आपको बहुत बहुत धन्यवाद। तुमने मुझे बचाया। मेरी भी यही समस्या थी। बॉक्स को चेक करने से समस्या ठीक हो गई। – techgentsia