Pergunta

Multiamostragem é uma forma de aplicar anti-aliasing em tela cheia (FSAA) em aplicações 3D.Preciso usar multisampling em meu programa OpenGL, que atualmente está incorporado em um wxWidgets GUI.Existe uma maneira de fazer isso?Por favor, responda apenas se você souber as etapas detalhadas para conseguir isso.

Estou ciente de ativar multisampling usando WGL (Extensões Win32 para OpenGL).No entanto, como meu programa OpenGL não está escrito em MFC (e quero que o código seja portátil para várias plataformas), essa não é uma opção para mim.

Foi útil?

Solução

Finalmente consegui fazer o Multisampling funcionar com meu programa wxWidgets OpenGL.Está um pouco confuso agora, mas veja como:

wxWidgets não tem Multiamostragem apoio em seus versões estáveis agora (a versão mais recente no momento é 2.8.8).Mas está disponível como patch e também por meio de snapshots diários.(O último é encorajador, pois significa que o patch foi aceito e deverá aparecer em versões estáveis ​​posteriores se não houver problemas.)

Então, existem 2 opções:

  1. Baixe e construa a partir de seus instantâneo diário.

  2. Pegue o correção para a instalação funcional do wxWidgets.

Achei a 2ª opção menos complicada, pois não quero atrapalhar ao máximo minha instalação em funcionamento.Se você não sabe como corrigir no Windows, consulte esse.

No mínimo, para Windows, o patch modificará os seguintes arquivos:

$(WX_WIDGETS_ROOT)/include/wx/glcanvas.h
$(WX_WIDGETS_ROOT)/include/wx/msw/glcanvas.h
$(WX_WIDGETS_ROOT)/src/msw/glcanvas.cpp

Após o patch, recompilar as bibliotecas wxWidgets.

Para ativar a multiamostragem em seu programa wxWidgets OpenGL, são necessárias pequenas alterações no código.

Uma lista de atributos precisa ser passada para o wxGLCanvas construtor:

int attribList[] = {WX_GL_RGBA,
                    WX_GL_DOUBLEBUFFER,
                    WX_GL_SAMPLE_BUFFERS, GL_TRUE, // Multi-sampling
                    WX_GL_DEPTH_SIZE, 16,
                    0, 0};

Se você já estava usando uma lista de atributos, adicione a linha com GL_SAMPLE_BUFFERS, GL_TRUE para isso.Caso contrário, adicione esta definição de lista de atributos ao seu código.

Em seguida, modifique seu construtor wxGLCanvas para usar esta lista de atributos como parâmetro:

myGLFrame::myGLFrame    // Derived from wxGLCanvas
(
    wxWindow *parent,
    wxWindowID id,
    const wxPoint& pos,
    const wxSize& size,
    long style,
    const wxString& name
)
: wxGLCanvas(parent, (wxGLCanvas*) NULL, id, pos, size, style, name, attribList)
{
    // ...
}

Após a criação do elemento wxGLCanvas, a multiamostragem é ativada por padrão.Para desativá-lo ou ativá-lo à vontade, use as chamadas OpenGL relacionadas:

glEnable(GL_MULTISAMPLE);
glDisable(GL_MULTISAMPLE);

A multisampling agora deve funcionar com o programa wxWidgets OpenGL.Esperançosamente, ele deverá ser suportado na versão estável do wxWidgets em breve, tornando esta informação irrelevante :-)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top