§ Основной файл main.cc
Главная логика по рисованию выполняется здесь, вызывается 60 раз в секунду. В модуле реализовано управление камерой с помощью мышки, а также управление на WASD.Скачать шаблон
#include "app.cc" int main() { App* app = new App(1024, 960); // -------------- int w = 256, h = 256; GLuint bgra[w*h]; // Создать тестовую текстуру for (int i = 0; i < h; i++) for (int j = 0; j < w; j++) { bgra[i*h + j] = (i^j)*256 | 0xFF000000; } GLuint texture_id = app->loadTexture(bgra, w, h); while (app->poll()) { app->clear(0); vec3 move = {0, 0, 0}; vec3 look = app->lookCamera(); // Обработка движений if (app->pressed(SDL_SCANCODE_W)) { move.x += look.x; move.z += look.z; } if (app->pressed(SDL_SCANCODE_S)) { move.x -= look.x; move.z -= look.z; } if (app->pressed(SDL_SCANCODE_A)) { move.x -= look.z; move.z += look.x; } if (app->pressed(SDL_SCANCODE_D)) { move.x += look.z; move.z -= look.x; } // Равномерное движение через нормализацию общего вектора app->moveCamera(app->normalize(move, 0.1)); app->updateCamera(); // Рисование объектов glLoadIdentity(); glBegin(GL_POLYGON); glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0, 1.0, -1.0); glTexCoord2f(1.0f, 0.0f); glVertex3f( 1.0, 1.0, -1.0); glTexCoord2f(1.0f, 1.0f); glVertex3f( 1.0, -1.0, -1.0); glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0, -1.0, -1.0); glEnd(); } app->destroy(); }makefile:
all: g++ -o main main.cc -lSDL2 -lGL -lm ./main