Archief - Verkeerde culling

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

ultddave

Legacy Member
Hey,


Ik had een probleempje, als ik deze regel toevoeg:
Code:
glEnable(GL_CULL_FACE);

Voor ik mijn balk ga tekenen (met QUADS), dan gaat hij de verkeerde zijdes weglaten. Dus vanuit bepaalde standpunten kan ik ineens door mijn balk kijken, terwijl dit uiteraard niet de bedoeling is. Dus in plaats van de achterste zijde niet te tekenen, tekent hij de zijde die naar de camera gericht staat, soms niet :P.

Enig idee waaraan dit kan liggen? Als ik bovenstaande regel weglaat, werkt alles wel, maar vroeg me gewoon af waar de fout bij zo een probleem kan liggen.

EDIT: Ik kan dus rondlopen in de scene, en dus rond die balk lopen. Vandaar dat ik het probleem opmerkte. Dat hij soms 2 a 3 zijden weglaat :s.

Greetz,
Dave

Volledige code:
Code:
    glEnable(GL_DEPTH_TEST);
    glEnable(GL_CULL_FACE);
    glDisable(GL_LIGHTING);

    glViewport(0, 0, g_windowWidth, g_windowHeight);
    glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    glMatrixMode(GL_PROJECTION);
    glLoadMatrixf(&g_camera.getProjectionMatrix()[0][0]);

    glMatrixMode(GL_MODELVIEW);
    glLoadMatrixf(&g_camera.getViewMatrix()[0][0]);

// Tekenen
    glColor3f(1.0, 1.0, 1.0);
    // Top
    glBegin(GL_QUADS);
        glVertex3f(-0.12f, 2.0f, -0.12f);
        glVertex3f(0.12f, 2.0f, -0.12f);
        glVertex3f(0.12f, 2.0f, 0.12f);
        glVertex3f(-0.12f, 2.0f, 0.12f);
    glEnd();
    // Bottom
    glBegin(GL_QUADS);
        glVertex3f(-0.12f, 1.5f, -0.12f);
        glVertex3f(0.12f, 1.5f, -0.12f);
        glVertex3f(0.12f, 1.5f, 0.12f);
        glVertex3f(-0.12f, 1.5f, 0.12f);
    glEnd();
    // Left
    glBegin(GL_QUADS);
        glVertex3f(-0.12f, 2.0f, -0.12f);
        glVertex3f(-0.12f, 2.0f, 0.12f);
        glVertex3f(-0.12f, 1.5f, 0.12f);
        glVertex3f(-0.12f, 1.5f, -0.12f);
    glEnd();
    // Right
    glBegin(GL_QUADS);
        glVertex3f(0.12f, 2.0f, -0.12f);
        glVertex3f(0.12f, 2.0f, 0.12f);
        glVertex3f(0.12f, 1.5f, 0.12f);
        glVertex3f(0.12f, 1.5f, -0.12f);
    glEnd();
    // Back
    glBegin(GL_QUADS);
        glVertex3f(-0.12f, 2.0f, -0.12f);
        glVertex3f(0.12f, 2.0f, -0.12f);
        glVertex3f(0.12f, 1.5f, -0.12f);
        glVertex3f(-0.12f, 1.5f, -0.12f);
    glEnd();
    // Front
    glBegin(GL_QUADS);
        glVertex3f(-0.12f, 2.0f, 0.12f);
        glVertex3f(0.12f, 2.0f, 0.12f);
        glVertex3f(0.12f, 1.5f, 0.12f);
        glVertex3f(-0.12f, 1.5f, 0.12f);
    glEnd();

kwitters

Legacy Member
Zie OpenGL Face culling not working properly - Stack Overflow

Simple face culling is based on the order of the vertices - whether they end up clockwise in screen space or anti-clockwise. So, the problem could be in the definition order of the vertices, or you might be applying some kind of transform, which flips the order (eg. negative scaling). The normals only play a role in lighting.

Dus de vlakken van jou balk kan je best met de klok mee tekenen (van buiten af gezien). Als je dan gaat cullen dan zou de buitenkant moeten getekend worden, en de binnenkant niet.

ultddave

Legacy Member
Ah, ik wist niet dat dat uitmaakte ;). Erg bedankt voor de info.

Mvg,
Dave
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan