0

こんにちは、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はこれをサポートしていますか?

4

1 に答える 1

3

あなたのコードは非常に混乱しています。

FreeGLUT と SFMLは OpenGL に関して同じことを行います: OpenGL コンテキストでウィンドウを作成します。同じアプリケーションで両方を使用しないでください

また、ウィンドウを作成するまで OpenGL 関数を呼び出すことはできません。そして、それらの関数は現在のコンテキストにのみ影響します。これらの関数は、SFML で作成した新しいコンテキストには影響しません。あなたのコードは単に意味がありません。

于 2013-05-24T20:48:58.720 に答える