Hola, llevo un par de dias que me esto tirando de los pelos
Quiero abrir una simple ventana para dibujar en opengl y lo quiero hacer usando el interface builder (IB), tengo eso mismo pero copiando uno de los ejemplos y quitando lo que no necesito, pero lo quiero hacer yo desde cero para enterarme.
Yo sigo los siguentes pasos, por cierto uso el xcode 3.1.
- Creo un proyecto cocoa
- Si lo ejecuto sale una ventana vacia, todo ok
- Le añado un NSOpenGLView a la ventada desde el IB, lo raro es que sale en negro y en los ejemplos esta sale en azul y con un nombre en el centro. Ademas con el inspector puedo poner los parametros de inicializacion (Formato de pixel, zbuffer...) pero en los ejemplos no puedo acceder a ellos .
- Compilo y ejecuto y sale la ventana con un cuadrado en blanco (la ventana de opengl)
- Creo un objeto en IB llamado openGLView y le pongo el siguiente codigo, ademas selecciono el NSOpenGLView y le digo que es de la clase openGLView, pero sale igual, ademas no parece que de error
Código:
-(id)initWithFrame: (NSRect)frame
{
GLuint attribs[] =
{
NSOpenGLPFANoRecovery,
NSOpenGLPFAWindow,
NSOpenGLPFAAccelerated,
NSOpenGLPFADoubleBuffer,
NSOpenGLPFAColorSize, 24,
NSOpenGLPFAAlphaSize, 8,
NSOpenGLPFADepthSize, 24,
NSOpenGLPFAStencilSize, 8,
NSOpenGLPFAAccumSize, 0,
0
} ;
NSOpenGLPixelFormat* fmt = [[NSOpenGLPixelFormat alloc] initWithAttributes: (NSOpenGLPixelFormatAttribute*) attribs];
if (!fmt)
NSLog(@"No OpenGL pixel format");
self = [super initWithFrame:frame pixelFormat: [fmt autorelease]];
return self;
}
-(void) drawRect:(NSRect)rect
{
[[self openGLContext] makeCurrentContext];
glViewport(0, 0, (GLsizei) rect.size.width, (GLsizei) rect.size.height);
glClearColor(0, 0, 0, 0);
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(-1.0, 1.0, -1.0, 1.0, -1.0, 1.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glColor3f(1.0, 1.0, 1.0);
glBegin(GL_TRIANGLES);
glVertex2f(-0.5, -0.5);
glVertex2f( 0.5, 0.5);
glVertex2f( 0.5, -0.5);
glEnd();
[[self openGLContext] flushBuffer ];
}
¿Alguna idea?
Marcadores