我想在NSOpenGLView
中显示一些东西,但是由于上面总共有零字节的文档,而且示例代码和文档应该一样大和复杂,所以我无法从中获得任何信息到目前为止,这是我的代码,我的ANOpenGLView
是NIB子类NSOpenGLView
中的ANOpenGLView
:
@implementation ANOpenGLView
@synthesize animationTimer;
// MEM
- (void)dealloc {
[animationTimer release];
[super dealloc];
}
// INIT
- (id)initWithFrame:(NSRect)frameRect {
if (self = [super initWithFrame:frameRect]) {
NSOpenGLPixelFormatAttribute pixelFormatAttributes[] = {
NSOpenGLPFADoubleBuffer,
NSOpenGLPFADepthSize, 32,
0
};
NSOpenGLPixelFormat *format = [[NSOpenGLPixelFormat alloc] initWithAttributes:pixelFormatAttributes];
[self setOpenGLContext:[[[NSOpenGLContext alloc] initWithFormat:format shareContext:nil] autorelease]];
}
return self;
}
- (void)awakeFromNib {
/* 60 FPS */
animationTimer = [[NSTimer timerWithTimeInterval:(1.0f/60.0f) target:self selector:@selector(redraw:) userInfo:nil repeats:YES] retain];
[[NSRunLoop currentRunLoop] addTimer:animationTimer forMode:NSDefaultRunLoopMode];
}
// DRAW
- (void)redraw:(NSTimer*)theTimer {
[self drawRect:[self bounds]];
}
- (void)drawRect:(NSRect)dirtyRect {
NSLog(@"Redraw");
[[self openGLContext] clearDrawable];
[[self openGLContext] setView:self];
[[self openGLContext] makeCurrentContext];
glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
glDisable(GL_DEPTH_TEST);
glClear(GL_COLOR_BUFFER_BIT);
glLoadIdentity();
glViewport(0, 0, [self frame].size.width, [self frame].size.height);
glMatrixMode(GL_PROJECTION); glLoadIdentity();
glMatrixMode(GL_MODELVIEW); glLoadIdentity();
glTranslatef(-1.5f, 0.0f, -6.0f);
glBegin( GL_TRIANGLES );
glColor3f(1.0f, 0.0f, 0.0f);
glVertex2f(0.0f, 1.0f);
glColor3f(0.0f, 1.0f, 0.0f);
glVertex2f(-1.0f, -1.0f);
glColor3f(0.0f, 0.0f, 1.0f);
glVertex2f(1.0f, -1.0f);
glEnd();
[[self openGLContext] flushBuffer];
[NSOpenGLContext clearCurrentContext];
}
@end
我怎样才能让三角形出现我只得到一个空白的白色屏幕。
P.S.我想画二维图。
编辑我已经更新了我的代码,这就是我现在拥有的:
最佳答案
我不确定这是唯一的问题,但是:
你还没有定义像素格式
你还没有在代码中设置矩阵
你还没有设置视区
这里http://www.cocoadev.com/index.pl?NSOpenGLView是一个简短的例子,它几乎是您所需要的,但是当您需要在2D空间(函数glOrtho)中进行正交渲染时,会设置透视矩阵在本例中,World&View可以是identity。
因为2D是您的目标,所以您不会处理太多矩阵,只需设置它们一次。
关于objective-c - 我的NSOpenGLView无法正常工作。我已经尝试了一切,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3953256/