我只是将一个.obj加载器移植到objective-C,到目前为止,它可以工作,我可以得到我的顶点和法线和东西.每个法线都很好,指向正确的方向,我所有的脸都处于CCW缠绕状态,但我在深度测试中遇到了一些问题.
float rotX = 0;
float rotY = 0;
objModel* o = [[objModel alloc] initWithPath:@"/model.obj"]
glClearColor(0,0,0,0);
glEnable(GL_DEPTH_TEST);
glFrontFace(GL_CCW);
glCullFace(GL_BACK);
glEnable(GL_CULL_FACE);
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
glEnable(GL_COLOR_MATERIAL);
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glTranslated(0, -1, 0);
glRotatef(90,0,0,1);
glRotatef(90,0,1,0);
glRotatef(rotX,0,0,-1);
glRotatef(rotY,0,1,0);
[o drawObjWithArrays]
glFlush();
Run Code Online (Sandbox Code Playgroud)
我有2种不同的绘制对象的方法,一种使用glBegin()/ glEnd(),另一种使用顶点和普通数组调用glDrawArrays().它们都会导致同样的问题:显示应该被它们前面的面隐藏的面,因为深度测试不起作用.面孔按照它们在.obj文件中的顺序绘制.
你会在这里找到一个图像:http://img524.imageshack.us/img524/994/image2jgq.png
我对OpenGL和Objective-C很新,所以我想我的问题来自于我忘记的设置.他们来了 :
-(id) initWithFrame:(NSRect) frame {
NSLog(@"INIT GL VIEW\n");
GLuint attributes[] = {
NSOpenGLPFANoRecovery,
NSOpenGLPFAWindow,
NSOpenGLPFAAccelerated,
NSOpenGLPFADoubleBuffer,
NSOpenGLPFAColorSize, 24,
NSOpenGLPFAAlphaSize, 8,
NSOpenGLPFADepthSize, 24,
NSOpenGLPFAStencilSize, 8,
NSOpenGLPFAAccumSize, 0,
0
};
NSOpenGLPixelFormat* fmt = [[NSOpenGLPixelFormat alloc] initWithAttributes:(NSOpenGLPixelFormatAttribute*) attributes]; …Run Code Online (Sandbox Code Playgroud)