§ Основной файл 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