int main() { Calculate my; my.calculate(); return 0; }
// // メインプログラム // int main() { // GLFW を初期化する if (glfwInit() == GL_FALSE) { // GLFW の初期化に失敗した MessageBox(NULL, TEXT("GLFW の初期化に失敗しました。"), TEXT("すまんのう"), MB_OK); return EXIT_FAILURE; } // プログラム終了時には GLFW を終了する atexit(glfwTerminate); // OpenGL Version 3.2 Core Profile を選択する glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3); glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 2); glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE); glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); // ウィンドウを開く Window window(640, 480, "Depth Map Viewer"); if (!window.get()) { // ウィンドウが作成できなかった MessageBox(NULL, TEXT("GLFW のウィンドウが開けませんでした。"), TEXT("すまんのう"), MB_OK); return EXIT_FAILURE; } // 深度センサを有効にする KinectV1 sensor; if (sensor.getActivated() == 0) { // センサが使えなかった MessageBox(NULL, TEXT("深度センサを有効にできませんでした。"), TEXT("すまんのう"), MB_OK); return EXIT_FAILURE; } // 深度センサの解像度 int width, height; sensor.getDepthResolution(&width, &height); // 描画に使うメッシュ const Mesh mesh(width, height, sensor.getCoordBuffer()); // 描画用のシェーダ GgSimpleShader simple("simple.vert", "simple.frag"); // デプスデータから頂点位置を計算するシェーダ const Calculate position(width, height, "position.frag"); // 頂点位置から法線ベクトルを計算するシェーダ const Calculate normal(width, height, "normal.frag"); // 背景色を設定する glClearColor(background[0], background[1], background[2], background[3]); // 隠面消去処理を有効にする glEnable(GL_DEPTH_TEST); glEnable(GL_CULL_FACE); // ウィンドウが開いている間くり返し描画する while (!window.shouldClose()) { #if GENERATE_POSITION // 頂点位置の計算 position.use(); glUniform1i(0, 0); glActiveTexture(GL_TEXTURE0); sensor.getDepth(); const std::vector<GLuint> &positionTexture(position.calculate()); // 法線ベクトルの計算 normal.use(); glUniform1i(0, 0); glActiveTexture(GL_TEXTURE0); glBindTexture(GL_TEXTURE_2D, positionTexture[0]); const std::vector<GLuint> &normalTexture(normal.calculate()); #else // 法線ベクトルの計算 normal.use(); glUniform1i(0, 0); glActiveTexture(GL_TEXTURE0); sensor.getPoint(); const std::vector<GLuint> &normalTexture(normal.calculate()); #endif // 画面消去 window.clear(); // 描画用のシェーダプログラムの使用開始 simple.use(); simple.loadMatrix(window.getMp(), window.getMw()); simple.setLight(light); simple.setMaterial(material); // テクスチャ #if GENERATE_POSITION glUniform1i(0, 0); glActiveTexture(GL_TEXTURE0); glBindTexture(GL_TEXTURE_2D, positionTexture[0]); #endif glUniform1i(1, 1); glActiveTexture(GL_TEXTURE1); glBindTexture(GL_TEXTURE_2D, normalTexture[0]); glUniform1i(2, 2); glActiveTexture(GL_TEXTURE2); sensor.getColor(); // 図形描画 mesh.draw(); // バッファを入れ替える window.swapBuffers(); } }