§ Основной файл main.cc

Главная логика по рисованию выполняется здесь, вызывается 60 раз в секунду. В модуле реализовано управление камерой с помощью мышки, а также управление на WASD.
Скачать шаблон
1#include "app.cc"
2
3int main() {
4
5    App* app = new App(1024, 960);
6
7    // --------------
8
9    int w = 256, h = 256;
10    GLuint bgra[w*h];
11
12    // Создать тестовую текстуру
13    for (int i = 0; i < h; i++)
14    for (int j = 0; j < w; j++) {
15        bgra[i*h + j] = (i^j)*256 | 0xFF000000;
16    }
17
18    GLuint texture_id = app->loadTexture(bgra, w, h);
19
20    while (app->poll()) {
21
22        app->clear(0);
23
24        vec3 move = {0, 0, 0};
25        vec3 look = app->lookCamera();
26
27        // Обработка движений
28        if (app->pressed(SDL_SCANCODE_W)) { move.x += look.x; move.z += look.z; }
29        if (app->pressed(SDL_SCANCODE_S)) { move.x -= look.x; move.z -= look.z; }
30        if (app->pressed(SDL_SCANCODE_A)) { move.x -= look.z; move.z += look.x; }
31        if (app->pressed(SDL_SCANCODE_D)) { move.x += look.z; move.z -= look.x; }
32
33        // Равномерное движение через нормализацию общего вектора
34        app->moveCamera(app->normalize(move, 0.1));
35        app->updateCamera();
36
37        // Рисование объектов
38        glLoadIdentity();
39        glBegin(GL_POLYGON);
40        glTexCoord2f(0.0f, 0.0f);  glVertex3f(-1.0,  1.0, -1.0);
41        glTexCoord2f(1.0f, 0.0f);  glVertex3f( 1.0,  1.0, -1.0);
42        glTexCoord2f(1.0f, 1.0f);  glVertex3f( 1.0, -1.0, -1.0);
43        glTexCoord2f(0.0f, 1.0f);  glVertex3f(-1.0, -1.0, -1.0);
44        glEnd();
45    }
46
47    app->destroy();
48}
makefile:
1all:
2	g++ -o main main.cc -lSDL2 -lGL -lm
3	./main