Iniciar sesión

Ver la versión completa : Xcode + Interface Builder + OpenGL



swapd0
22/02/2011, 22:33
Hola, llevo un par de dias que me esto tirando de los pelos :lamer:

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 :confused:.
- 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


-(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?

swapd0
25/02/2011, 23:22
jope que exito XD

hardyx
25/02/2011, 23:36
Buff, es que el Objetive-C es durillo y Cocoa no veas.
No se si conoces GLUT, es una librería de utilidades y gestión de ventanas multiplataforma. Funciona igual en Macos, en Linux y en Windows. Aquí tienes un ejemplo de código (http://mindfuck.de-brauwer.be/articles/glut/).

swapd0
26/02/2011, 00:18
Si que conozco las glut pero lo quiero hacer con cocoa para aprender, pero por ahora la curva de aprendizaje tiene una pendiente de +infinito

^MiSaTo^
26/02/2011, 10:58
A la tarde te miro como va. Yo openGL lo toco en el iPhone, pero no difiere mucho del Cocoa de Mac (tb he hecho algunas cosillas para Mac).

swapd0
27/02/2011, 01:06
Es curioso porque sigo esto al pie de la letra y no funciona

http://www.youtube.com/watch?v=L5dGZMkdzSo

< - >
Por fin!!!!1!!!!

para que aprendais de mi error
http://www.idevgames.com/forums/thread-4391.html
http://developer.apple.com/library/mac/#qa/qa2004/qa1167.html

^MiSaTo^
27/02/2011, 13:05
Perdona que no te haya respondido pero ayer me subi a la montaña con la moto, vine muerta y ni miré el foro xD
Me alegro que se te haya solucionado ;)

swapd0
27/02/2011, 15:56
Perdona que no te haya respondido pero ayer me subi a la montaña con la moto, vine muerta y ni miré el foro xD
Me alegro que se te haya solucionado ;)

No problemo, ademas se aprende mas solucionando uno mismo los problemas que pidiendo ayuda pero es que estaba desesperado :lamer: