Ich fange an, an einem 3D-Partikelsystem-Editor und -Entwickler zu arbeiten. Ich habe in der Vergangenheit etwas Ähnliches mit OpenGL gemacht, aber dieses Mal mache ich eine Mac OS X Kakaoverwendung. Ich habe nur ein paar Fragen zu Code, den ich bei der Einrichtung von OpenGL immer wieder aufrufe.Einrichten des kontinuierlichen Renderns in einer Mac OSX Cocoa-Anwendung mit OpenGL
1) Warum muss ich eine Menge Leute, die im Internet zu sehen mit ...
[self setNeedsDisplay:YES];
Ist dies der richtige Weg, OpenGL zu bekommen zu machen, jetzt verstehe ich es zu drawRect führt genannt zu werden, aber ist es der richtige Weg?
2) Ist drawRect die richtige Methode, die ich für meine Render-Frame-Methode überschreiben sollte?
Heres der Code, den ich weiterhin in auf dem Netz laufen:
-(void) prepareOpenGL {
[[self window] makeFirstResponder:self];
glClearColor(1.0f, 1.0f, 0.0f, 10.f);
NSTimer *timer = [NSTimer timerWithTimeInterval:1.0/60.0 target:self selector:@selector(idle:) userInfo:nil repeats:YES];
[[NSRunLoop currentRunLoop] addTimer:timer forMode:NSDefaultRunLoopMode];
}
-(void)idle:(NSTimer *)timer {
if(![[NSApplication sharedApplication] isHidden])
[self setNeedsDisplay:YES];
}
-(void) drawRect:(NSRect)dirtyRect {
glClear(GL_COLOR_BUFFER_BIT);
}
Ich erweitere derzeit NSOpenGLView. Was würden Sie für die Verwendung der programmierbaren Pipelines von OpenGL für die Darstellung von Tausenden von Partikeln im 3D-Raum empfehlen? –
@JimmyBouker - Beide werden Rendering-Aufgaben genauso gut behandeln. Wenn Sie planen, etwas über Ihre Ansicht zu legen, spart Ihnen CAOpenGLLayer Zeit. Wenn Sie Multithread-Rendering benötigen, macht NSOpenGLView das ein wenig einfacher. –
Vielen Dank Zoo, ich werde auf jeden Fall Multi-Threading-Rendering haben und ich werde nicht etwas auf meiner Oberfläche legen. Danke Brad –