Я новичок в OpenGL ES. В качестве теста я пытаюсь нарисовать простой треугольник на GLKView. Нет ошибок компиляции или времени выполнения, а также ошибок OpenGL. Он просто не рисует треугольник. Он устанавливает чистый цвет ОК, что означает, что OpenGL работает, но он просто не рисует треугольник, что я делаю не так ...
Чертежный код обратного вызова
- (void)glkView:(GLKView *)view drawInRect:(CGRect)rect
{
const GLfloat triangleVertices[] = {
0.0, 2.0, 3.0, // Triangle top centre
-2.0, -2.0, 3.0, // bottom left
2.0, -2.0, 3.0 // bottom right
};
glViewport(0, 0, 12, 12);
[self checkError];
glMatrixMode(GL_MODELVIEW);
// Our new drawing code goes here
glLoadIdentity();
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
[self checkError];
// Red
glColor4f(1.0f, 0.0f, 0.0f, 1.0f);
glVertexPointer(3, GL_FLOAT, 0, &triangleVertices);
glEnableClientState(GL_VERTEX_ARRAY);
glDrawArrays(GL_TRIANGLES, 0, 3);
[self checkError];
}
Весь код файла
#import "ViewController.h"
#import <QuartzCore/QuartzCore.h>
@interface ViewController ()
@property (nonatomic, retain) EAGLContext *context;
@end
@implementation ViewController
@synthesize context = _context;
@synthesize Zoom = _Zoom;
- (void)dealloc
{
[_context release];
[super dealloc];
}
- (void)viewDidLoad
{
[super viewDidLoad];
self.context = [[[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES1] autorelease];
if (!_context) {
NSLog(@"Failed to create ES context");
}
_Zoom = 1;
GLKView *view = (GLKView *)self.view;
view.context = self.context;
view.drawableDepthFormat = GLKViewDrawableDepthFormat24;
[EAGLContext setCurrentContext:self.context];
[self setupGL];
[self checkError];
}
- (void)viewDidUnload
{
[super viewDidUnload];
if ([EAGLContext currentContext] == self.context) {
[EAGLContext setCurrentContext:nil];
}
self.context = nil;
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Release any cached data, images, etc. that aren't in use.
}
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {
return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);
} else {
return YES;
}
}
- (void)setupGL
{
[EAGLContext setCurrentContext:self.context];
CGFloat w = self.view.bounds.size.width;
CGFloat h = self.view.bounds.size.height;
glEnable(GL_DEPTH_TEST);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glClearColor(0.65f, 0.65f, 1.00f, 1.0f);
double mLat = (((double)h / 2) * (_Zoom / 60));
double mLon = (((double)w / 2) * (_Zoom / 60));
glOrthof((float)-mLon, (float)mLon, (float)-mLat, (float)mLat, -5.0f, 5.0f);
glViewport(0, 0, w, h);
}
-(void) checkError
{
GLenum error = glGetError();
if (error == GL_NO_ERROR)
return;
switch (error)
{
case GL_INVALID_ENUM:
NSLog(@"Invalid Enum");
break;
}
}
#pragma mark - GLKView and GLKViewController delegate methods
- (void)update
{
}
- (void)glkView:(GLKView *)view drawInRect:(CGRect)rect
{
const GLfloat triangleVertices[] = {
0.0, 2.0, 3.0, // Triangle top centre
-2.0, -2.0, 3.0, // bottom left
2.0, -2.0, 3.0 // bottom right
};
glViewport(0, 0, 12, 12);
[self checkError];
glMatrixMode(GL_MODELVIEW);
// Our new drawing code goes here
glLoadIdentity();
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
[self checkError];
// Red
glColor4f(1.0f, 0.0f, 0.0f, 1.0f);
glVertexPointer(3, GL_FLOAT, 0, &triangleVertices);
glEnableClientState(GL_VERTEX_ARRAY);
glDrawArrays(GL_TRIANGLES, 0, 3);
[self checkError];
}
@end