Поддерживает ли SFML прозрачность?

Привет, я пытаюсь нарисовать полупрозрачную сферу с помощью OpenGL / glut;

Я думаю, что проще всего опубликовать код: это то, что у меня есть на данный момент;

glutInit(&argc, argv);

sf::ContextSettings settings;
settings.depthBits = 32;
settings.stencilBits = 0;
settings.antialiasingLevel = 0;

sf::Window window(sf::VideoMode(800, 600), "insert title", sf::Style::Default, settings);
window.setVerticalSyncEnabled(true);


glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glEnable(GL_BLEND);
glClearColor(0.0,0.0,0.0,0.0);


bool running = true;
while(running)
{
    sf::Event e;
    while(window.pollEvent(e))
    {
        if(e.type == sf::Event::Closed)
        {
            running = false;
        }

        if(e.type == sf::Event::Resized)
        {
            glViewport(0, 0, e.size.width, e.size.height);

            glMatrixMode(GL_PROJECTION);

            glLoadIdentity();
            gluPerspective(45.0, (double)e.size.width / (double)e.size.height, 0.1, 2000.0);

            gluLookAt(0,0,0, 1,0,0, 0,1,0);

            glMatrixMode(GL_MODELVIEW);
        }
    }

    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);

    glColor4d(1.0, 0.0, 0.0, 0.5);

    glutWireSphere(0.5, 4, 4);

    window.display();
}

Прогонял эту штуку под optirun и без optirun ... Но никакой прозрачности!

Я где-то читал, что у контекста должен быть альфа-буфер ... Поддерживает ли это SFML?


person FreelanceConsultant    schedule 24.05.2013    source источник
comment
Этот код имеет все признаки кодирования с копированием и вставкой. Пожалуйста, не делай этого.   -  person Nicol Bolas    schedule 25.05.2013
comment
Здесь нет копирования и вставки.   -  person FreelanceConsultant    schedule 25.05.2013
comment
Вы используете GLUT xor SFML?   -  person genpfault    schedule 25.05.2013
comment
GLUT для рисования сферы, SFML для визуализации.   -  person FreelanceConsultant    schedule 25.05.2013
comment
stackoverflow.com/questions/721705/   -  person Grimmy    schedule 25.05.2013


Ответы (1)


Ваш код очень запутан.

FreeGLUT и SFML делают то же самое в отношении OpenGL: они создают окна с контекстами OpenGL. Вы не должны использовать их оба в одном приложении.

Кроме того, вы не можете вызывать функции OpenGL, пока не создадите окно. И эти функции будут только влиять на текущий контекст. Эти функции не будут иметь никакого влияния на новый контекст, который вы создаете с помощью SFML. Ваш код просто не имеет смысла.

person Nicol Bolas    schedule 24.05.2013
comment
@EdwardBird: вы все еще вызываете функции GLUT (и, следовательно, включаете их в свой проект SFML). Не смешивайте GLUT и SFML. - person Nicol Bolas; 25.05.2013
comment
Как еще нарисовать сферу? - person FreelanceConsultant; 25.05.2013
comment
В GLU также есть функции для рисования простых форм, таких как сферы: opengl.org/ sdk / docs / man2 / xhtml / gluSphere.xml. - person Grimmy; 25.05.2013
comment
@EdwardBird: рисуя серию треугольников, приближающихся по форме к сфере. GLUT не делает того, что вы не можете сделать в одиночку. - person Nicol Bolas; 25.05.2013
comment
@NicolBolas Хахахахаха, нарисуй серию треугольников, зачем усложнять жизнь ?! Предоставьте какой-нибудь источник, который рисует сферу, и я буду впечатлен. - person FreelanceConsultant; 25.05.2013
comment
Если это работает, и вас не волнует базовое качество или производительность, тогда, я думаю, это нормально, но я не знаю, какие нечестивые вещи, смешанные вместе, эти библиотеки могут на самом деле сделать с вашим приложением :) С SFML вы должны определить свой собственные данные сетки. Если вы не хотите его генерировать, существует множество ресурсов для создания простых загрузчиков сетки. Затем вы можете просто создать свою геометрию, например, в Blender. - person Grimmy; 25.05.2013