Странный глюк с моим кодом

Поэтому сегодня я возился с некоторыми примерами и решил, что хочу создать приложение. Я попытался. Когда я нажимаю один раз, экран становится черным, другой щелчок, затем белый, и после некоторого спама появляется блок, повторное нажатие делает фон черным, еще один щелчок, а затем белый. После еще одного спама внутри блока есть еще один блок, картинки прикрепляются.

КОД:

#include "SFML/Graphics.hpp"
#include "SFML/OpenGL.hpp"
#include <GL\GLU.h>
#include <iostream>
#include "cube.cpp"

void createblock() {

    gluPerspective(90.f, 1.f, 1.f, 300.0f);
    glClearColor(0.3f, 0.3f, 0.3f, 0.f);
    glMatrixMode(GL_PROJECTION);
    glEnable(GL_DEPTH_TEST);
    glDepthMask(GL_TRUE);

    glBegin(GL_QUADS);
    glVertex3f(-50.f, -50.f, -50.f);
    glVertex3f(-50.f, 50.f, -50.f);
    glVertex3f(50.f, 50.f, -50.f);
    glVertex3f(50.f, -50.f, -50.f);


    glVertex3f(-50.f, -50.f, 50.f);
    glVertex3f(-50.f, 50.f, 50.f);
    glVertex3f(50.f, 50.f, 50.f);
    glVertex3f(50.f, -50.f, 50.f);

    glColor3f(1, 0, 1);
    glVertex3f(-50.f, -50.f, -50.f);
    glVertex3f(-50.f, 50.f, -50.f);
    glVertex3f(-50.f, 50.f, 50.f);
    glVertex3f(-50.f, -50.f, 50.f);

    glColor3f(0, 1, 0);
    glVertex3f(50.f, -50.f, -50.f);
    glVertex3f(50.f, 50.f, -50.f);
    glVertex3f(50.f, 50.f, 50.f);
    glVertex3f(50.f, -50.f, 50.f);

    glColor3f(1, 1, 0);
    glVertex3f(-50.f, -50.f, 50.f);
    glVertex3f(-50.f, -50.f, -50.f);
    glVertex3f(50.f, -50.f, -50.f);
    glVertex3f(50.f, -50.f, 50.f);

    glColor3f(1, 0, 0);
    glVertex3f(-50.f, 50.f, 50.f);
    glVertex3f(-50.f, 50.f, -50.f);
    glVertex3f(50.f, 50.f, -50.f);
    glVertex3f(50.f, 50.f, 50.f);

    glEnd();
}

sf::RenderWindow window(sf::VideoMode(800, 600), "SimpleBlocks");
sf::Event maine;

int main() {

    while (window.isOpen()) {
        // load defaults here

        while (window.pollEvent(maine)) {
            // events here
            if (maine.type == sf::Event::Closed) {
                window.close();
            } 
            if (maine.type == sf::Event::MouseButtonPressed) { 
                createblock();
                window.display();

                // make block later   
            }
        }
    }
}

ИЗОБРАЖЕНИЙ:

Imgur альбом здесь

2 ответа

Ты никогда не звонишь glClear(GL_COLOR_BUFFER_BIT) перед рисованием, поэтому всегда есть оставшиеся фрагменты или некоторая пересекающаяся информация. Добавление четкого вызова должно исправить вашу проблему.

Вызов glPushMatrix до gluPerspective а также glPopMatrix в конце createblock

Другие вопросы по тегам