私はObject-Cに.objローダーを移植しました。これまでのところ、私は頂点と法線とを得ることができます。 すべてのノーマルは正しいですが、正しい方向を指しています。私の顔はすべてCCWワインディングですが、デプステストに問題があります。 OpenGL GL_DEPTH_TESTが動作しません
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();
私は私の描画オブジェクトの2つの異なる方法があり、一つは使用glBegin()/ glEndの()、その他)はglDrawArraysの呼び出し(と頂点と正常な配列を使用します。どちらも同じ問題を引き起こします。深度テストが機能していないため、前面の顔によって隠れるべき顔が表示されます。面は.objファイルの順序で描画されます。
あなたはここに画像を見つけることができます:http://img524.imageshack.us/img524/994/image2jgq.png
をI 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];
if (!fmt)
NSLog(@"No OpenGL pixel format");
GLfloat mat_ambient[] = {0.0, 0.0, 1.0, 1.0};
GLfloat mat_flash[] = {0.0, 0.0, 1.0, 1.0};
GLfloat mat_flash_shiny[] = {50.0};
GLfloat light_position[] = {100.0,-200.0,-200.0,0.0};
GLfloat ambi[] = {0.1, 0.1, 0.1, 0.1};
GLfloat lightZeroColor[] = {0.9, 0.9, 0.9, 0.1};
/* set the material */
glLightfv(GL_LIGHT0, GL_POSITION, light_position);
glLightfv(GL_LIGHT0, GL_AMBIENT, ambi);
glLightfv(GL_LIGHT0, GL_DIFFUSE, lightZeroColor);
glMaterialfv(GL_FRONT, GL_SHININESS, mat_flash_shiny);
glMaterialfv(GL_FRONT, GL_SPECULAR, mat_flash);
glMaterialfv(GL_FRONT, GL_AMBIENT, mat_ambient);
return self = [super initWithFrame:frame pixelFormat:[fmt autorelease]];
}
誰でも私を助けることができますか?私が試したすべての人glDepthFunc、glCullFace、可能glFrontFaceの組み合わせ、何も動作...
感謝^^
drawRect関数に追加され、「0ビット深度」を返します。正しいとは思わない... – melka
あなたの問題がある。 – shoosh
うわー、ありがとう、それは働いた。 IBでパラメータを設定する必要があるかどうかわかりませんでした。 今、私は24ビットの深さを持っています。私の見解ではこれ以上の問題はありません^^ – melka