Форум программистов, компьютерный форум, киберфорум
Наши страницы
OpenGL
Войти
Регистрация
Восстановить пароль
 
DevilRigoll
1 / 1 / 1
Регистрация: 09.04.2014
Сообщений: 57
#1

Квадраты вместо букв при отрисовке текста

27.01.2017, 18:06. Просмотров 262. Ответов 1
Метки нет (Все метки)

Не понимаю, когда пытаюсь отрисовать текст, вместо букв появляются вот такие вот квадраты. В чем проблема?

Квадраты вместо букв при отрисовке текста


text2D.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
class Text2D {
private:
    GLuint vertex_buffer;
    GLuint uv_buffer;
    GLuint uniformId;
    GLuint shaderId;
    GLuint VAO;
    Texture *texture;
    //unsigned int Text2DTextureID;
public:
    Text2D(const char * text_dds_path) {
        glGenVertexArrays(1, &VAO);
        glBindVertexArray(VAO);
        texture = new Texture(GL_TEXTURE_2D, text_dds_path);
        //Text2DTextureID = loadDDS(text_dds_path);
 
        glGenBuffers(1, &vertex_buffer);
        glGenBuffers(1, &uv_buffer);
 
        shaderId = LoadShaders("C:/Users/DevilRigoll/Desktop/Game GUI/fonts/Text.vertexshader", 
                               "C:/Users/DevilRigoll/Desktop/Game GUI/fonts/Text.fragmentshader");  //LoadShaders(pVS, pFS);
 
        uniformId = glGetUniformLocation(shaderId, "myTextureSampler");
        glBindVertexArray(0);
    };
    ~Text2D() {
        //if (vertex_buffer != 0) {
            glDeleteBuffers(1, &vertex_buffer);
            glDeleteBuffers(1, &uv_buffer);
        //}
        if (texture != NULL)
            delete texture;
 
        glDeleteProgram(shaderId);
        glDeleteVertexArrays(1,&VAO);
        VAO = 0;
    }
    void print(std::string text, glm::vec2 pos, GLuint size, glm::vec4 color);
    void clear_text();
};
 
void Text2D::print(std::string text, glm::vec2 pos, GLuint size, glm::vec4 color) {
 
    std::vector<glm::vec2> vertices;
    std::vector<glm::vec2> UVs;
 
    for (size_t i = 0; i < text.size(); i++){
 
        glm::vec2 vertex_up_left = glm::vec2(pos.x + i*size, pos.y + size);
        glm::vec2 vertex_up_right = glm::vec2(pos.x + i*size + size, pos.y + size);
        glm::vec2 vertex_down_right = glm::vec2(pos.x + i*size + size, pos.y);
        glm::vec2 vertex_down_left = glm::vec2(pos.x + i*size, pos.y);
 
        vertices.push_back(vertex_up_left);
        vertices.push_back(vertex_down_left);
        vertices.push_back(vertex_up_right);
 
        vertices.push_back(vertex_down_right);
        vertices.push_back(vertex_up_right);
        vertices.push_back(vertex_down_left);
 
        char character = text[i];
        float uv_x = (character % 16) / 16.0f;
        float uv_y = (character / 16) / 16.0f;
 
        glm::vec2 uv_up_left = glm::vec2(uv_x, uv_y);
        glm::vec2 uv_up_right = glm::vec2(uv_x + 1.0f / 16.0f, uv_y);
        glm::vec2 uv_down_right = glm::vec2(uv_x + 1.0f / 16.0f, uv_y + 1.0f / 16.0f);
        glm::vec2 uv_down_left = glm::vec2(uv_x, uv_y + 1.0f / 16.0f);
 
 
        UVs.push_back(uv_up_left);
        UVs.push_back(uv_down_left);
        UVs.push_back(uv_up_right);
 
        UVs.push_back(uv_down_right);
        UVs.push_back(uv_up_right);
        UVs.push_back(uv_down_left);
    }
 
 
    glBindVertexArray(VAO);
 
    glBindBuffer(GL_ARRAY_BUFFER, vertex_buffer);
    glBufferData(GL_ARRAY_BUFFER, vertices.size() * sizeof(glm::vec2), &vertices[0], GL_STATIC_DRAW);
    glBindBuffer(GL_ARRAY_BUFFER, uv_buffer);
    glBufferData(GL_ARRAY_BUFFER, UVs.size() * sizeof(glm::vec2), &UVs[0], GL_STATIC_DRAW);
 
 
    glUseProgram(shaderId);
 
    texture->bind(GL_TEXTURE0);
 
    glUniform1i(uniformId, 0);
 
    glEnableVertexAttribArray(0);
    glBindBuffer(GL_ARRAY_BUFFER, vertex_buffer);
    glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 0, (void*)0);
 
    glEnableVertexAttribArray(1);
    glBindBuffer(GL_ARRAY_BUFFER, uv_buffer);
    glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, 0, (void*)0);
 
 
    glEnable(GL_BLEND);
    glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
 
 
    glDrawArrays(GL_TRIANGLES, 0, vertices.size());
 
    glDisable(GL_BLEND);
 
    glDisableVertexAttribArray(0);
    glDisableVertexAttribArray(1);
 
    glBindVertexArray(0);
}
main.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
...
 
do{
 
        // Measure speed
        double currentTime = glfwGetTime();
        nbFrames++;
        if (currentTime - lastTime >= 1.0){ // If last prinf() was more than 1sec ago
            // printf and reset
            printf("%f ms/frame\n", 1000.0 / double(nbFrames));
            nbFrames = 0;
            lastTime += 1.0;
        }
 
 
        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
 
        
        //camera controller
        computeMatricesFromInputs();
        glm::mat4 ProjectionMatrix = getProjectionMatrix();
        glm::mat4 ViewMatrix = getViewMatrix();
 
 
        glUseProgram(programID);
 
        glm::vec3 lightPos = glm::vec3(4, 4, 4);
        glUniform3f(LightID, lightPos.x, lightPos.y, lightPos.z);
        glUniformMatrix4fv(ViewMatrixID, 1, GL_FALSE, &ViewMatrix[0][0]); 
 
        glm::mat4 ModelMatrix1 = glm::mat4(1.0);
        glm::mat4 MVP1 = ProjectionMatrix * ViewMatrix * ModelMatrix1;
 
 
        glUniformMatrix4fv(MatrixID, 1, GL_FALSE, &MVP1[0][0]);
        glUniformMatrix4fv(ModelMatrixID, 1, GL_FALSE, &ModelMatrix1[0][0]);
 
 
        glUniform1i(textureID, 0);
 
        mesh->render();
 
        text->print(std::string("good game!!!"), glm::vec2(50, 50), 50, glm::vec4(1, 1, 1, 1));
 
        glfwSwapBuffers(main_window);
        glfwPollEvents();
 
    } // Check if the ESC key was pressed or the window was closed
    while (glfwGetKey(main_window, GLFW_KEY_ESCAPE) != GLFW_PRESS &&
        glfwWindowShouldClose(main_window) == 0);
...

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.01.2017, 18:06
Ответы с готовыми решениями:

Артефакты при отрисовке прозрачного куба
Добрый день! Столкнулся со следующей проблемой: при отрисовке прозрачного куба...

Белый экран при пиксельной отрисовке
5-ый час уже сижу и никак не могу понять, почему у меня тупо висит белый экран....

Использование нескольких текстур при отрисовке
Пытаюсь нарисовать 2 текстуры в 1 шейдерной программе, но не получается. ...

Реализовать паузу в отрисовке
Привет всемогущий All, попиксельно заполняю экран (циклом), нужно чтоб...

Квадраты вместо букв
Проблема в следующем: стоит Ubuntu Server 11.04, но вместо кириллицы...

1
koker007
16 / 19 / 1
Регистрация: 04.08.2015
Сообщений: 317
Завершенные тесты: 2
31.01.2017, 03:55 #2
Цитата Сообщение от DevilRigoll Посмотреть сообщение
вместо букв появляются вот такие вот квадраты
У меня такая проблема была когда текстура со шрифтом подменялась на другую, проследите правильность заноса текстуры до самого шейдера. Скорей всего текстура предназначенная для шрифта подменяется на другую раз квадраты разные то текстурные координаты по всей видимости правильные, и предназначены для текста, но вот текстура не с текстом.
Если по какой-то причине текстура не загрузилась, вы используете текстурный массив и номер текстры выходит за пределы текстурного массива, то OpenGL будет использовать последнюю успешно занесеную текстуру из текстурного массива.

Наверное коряво объяснил... но.. в общем.. проследите правильность заноса текстуры до самого шейдера.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.01.2017, 03:55

Квадраты, вместо русских букв
Привет всем! У меня такая проблема

Выводит в консоль вместо русских букв квадраты
Добрый день. Подскажите пожалуйста, почему в Netbeans вместо русских букв...

В вордовских документах вместо некоторых букв отображаются квадраты
На нескольких компах некоторые воровские документы стали открываться с...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru