Zdravím vás, zase mám problémek. Dělám relativně jednoduchou gamesku v OpenGL + WinApi. Problém je v tom, že při vykreslování se vykreslují v popředí ty útvary, které zadám později a to přesto, že by měly být hlouběji. Snažil jsem se na to přijít sám, ale marně. Přitom když jsem např. prohodil pořadí stěn krychle, tak všechno vypadalo, jak má. Většinu kódu jsem kopíroval z cz-nehe tutoriálů, jen jsem ho zahrnul do metod třídy.
Vážně nechápu, čím by to mohlo být. Teda vypadá to jako by tam chyběl depth test, ale ten tam mám.
Dám se inicializační funkci, ale myslím, že moc nepomůže, protože je OK.
bool game::init(){ // Nastaví svěla, blendig, smoothing a podobně...
if (!load_GL_textures()){ // Testuje úspěšnost funkce načítající textury.
MessageBox(NULL, TEXT("Nelze načíst textury, hra bude ukončena."), TEXT("Nastala chyba."), MB_OK|MB_ICONEXCLAMATION);
return false; // Nezdařilo se, navrať false.
}
// Načte display listy:
build_lists(); // Nakompiluje si několik útvarů. To by mělo fungovat.
glEnable(GL_TEXTURE_2D); // Povolí mapování textur.
glShadeModel(GL_SMOOTH); // Enable Smooth Shading
glClearColor(0.0f, 0.0f, 0.0f, 0.5f); // Black Background
glClearDepth(1.0f); // Depth Buffer Setup
glEnable(GL_DEPTH_TEST); // Enables Depth Testing
glDepthFunc(GL_LEQUAL); // The Type Of Depth Testing
glEnable(GL_LIGHT0); // Quick And Dirty Lighting (Assumes Light0 Is Set Up)
glEnable(GL_LIGHTING); // Enable Lighting
glEnable(GL_COLOR_MATERIAL); // Enable Material Coloring
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); // Really Nice Perspective Calculations
// glLightfv(GL_LIGHT1, GL_AMBIENT, LightAmbient); // Setup The Ambient Light
// glLightfv(GL_LIGHT1, GL_DIFFUSE, LightDiffuse); // Setup The Diffuse Light
// glLightfv(GL_LIGHT1, GL_POSITION,LightPosition); // Position The Light
// glEnable(GL_LIGHT1); // Enables using light one.
return true; // Initialization went Ok.
};
Ten kód se určitě zavolá, protože je v inicializaci okna a pokud by selhal vylítnou message boxy. Určitě nikde nevypínám depth test.
Díky za každou radu.