Pergunta

Para compor o texto com OpenGL eu tirar a textura quad abordagem, eu desenhar um quadrilátero para cada caractere que precisa ser representado.Eu armazenar todos os caracteres textura de informações em uma única textura, e usar glScalef e glTranslatef na textura da matriz para seleccionar o carácter correcto na textura.No começo eu apenas coloquei alguns caracteres da imagem usada para criar a textura e ele funcionou bem.

Desde então eu precisava para tornar mais caracteres, como letras minúsculas.Eu tentei adicionar mais caracteres, mas agora o meu texto acaba desalinhada e menores.

Existe uma maneira correta para criar mapas de caracteres, ou é a minha abordagem, todos juntos errado?

Nota:Eu estou usando um mono-estilo de fonte para fonte dimensões não deve ser o problema, no entanto, gostaria de acrescentar o suporte para tipos de letra com a não-uniforme de tamanho de caracteres bem.

EDITAR:Eu estou usando um buffer de vértice para desenho em vez de modo imediato.

EDIT 2:A textura contendo o mapa de caracteres tem 9 linhas, cada uma com 11 caracteres.Já que os personagens são do mesmo tamanho, eu uso glscalef na textura da matriz de 1/9 a largura da textura, e 1/11 a altura.O VBO define a quad (0,0),(1,0),(0,1),(1,1) e tex coords (0,0),(1,0),(0,1),(1,1).O nonalignment parece ser devido à minha transformações não cabendo a cada glifo exatamente.Como o ideal limites para cada glifo calculado?

Foi útil?

Solução

Na esperança de que isso pode ser útil para outras pessoas.O ideal glifo de limites pode ser calculado pela primeira normalizar o pixel deslocamentos de cada letra, de modo que eles são números no intervalo de 0 e 1.As larguras e alturas também pode ser normalizado para determinar o correto caixa delimitadora.Se as larguras e alturas são uniformes, como em mono fontes, estático valores de largura e altura podem ser utilizados para calcular o glifo limites.

Poupança de uma matriz de pixel valores de posição para cada imagem seria tedioso para calcular à mão, então é melhor começar o primeiro glifo no primeiro pixel do mapa de caracteres e manter sem espaçamento entre cada letra.Isto faria com que o cálculo da parte inferior esquerda coordenadas uv fácil com loops for

void GetUVs(Vector2* us, Vector2* vs, float charWidth, float charHeight, int cols, int rows)
{
    for (int x = 0; x < cols; x++)
    {
        for (int y = 0; y < rows; y++)
        {
            int index = x + cols * y;
            us[index].x = x * charWidth;
            vs[index].y = y * charHeight;
        }
    }
}

O resto dos limites pode ser calculado adicionando a largura, a altura e a largura e a altura respectivamente.

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