我想在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/

10-09 12:29