/* Construct Packet */ void Construct_Packet(void) { //Serial.println("construct packet top"); //Variable for Index and uptime unsigned long uptime_ms; //Put schema number in packet G_packet.schema = 297; //Update data uptime_ms = millis(); //Put uptime in packet G_packet.uptime_ms = uptime_ms; //Poll and put battery and panel data in packet for(int p = 0; p < 6; p++) { G_packet.batt_mv[p] = battery(); G_packet.panel_mv[p] = panel(); delay(400); } //Poll and put panel data in packet /*for(int p = 0; p < 6; p++) { G_packet.panel_mv[p] = panel(); delay(400); }*/ G_packet.bmp185_press_pa = pressure(); G_packet.bmp185_temp_decic = temp(); G_packet.humidity_centi_pct = humidity(); //Poll and put irradiance data in packet for(int i = 0; i < 20; i++) { G_packet.solar_irr_w_m2[i] = irradiance(); delay(300); } /*//Hardcoded Test Packet G_packet.uptime_ms = 1; for(int p = 0; p <= 4; p++) { G_packet.batt_mv[p] = 1; Serial.print("Battery"); Serial.println(G_packet.batt_mv[p]); delay(400); } for(int p = 0; p <= 4; p++) { G_packet.panel_mv[p] = 2; Serial.print("Panel"); Serial.println(G_packet.panel_mv[p]); delay(400); } G_packet.bmp185_press_pa = 3; Serial.print("Pressure"); Serial.println(G_packet.bmp185_press_pa); G_packet.bmp185_temp_decic = 4; Serial.print("Temp"); Serial.println(G_packet.bmp185_temp_decic); G_packet.humidity_centi_pct = 5; Serial.print("Humidity"); Serial.println(G_packet.humidity_centi_pct); for(int i = 0; i <= 14; i++) { G_packet.solar_irr_w_m2[i] = 6; Serial.print("Solar"); Serial.println(G_packet.solar_irr_w_m2[i]); delay(1000); }*/ }
// // メインプログラム // int main() { // GLFW を初期化する if (glfwInit() == GL_FALSE) { // 初期化に失敗した std::cerr << "Can't initialize GLFW" << std::endl; return 1; } // プログラム終了時の処理を登録する atexit(cleanup); // ウィンドウを作成する Window window("Irradiance Mapping", 960, 540); // OpenGL の初期設定 glClearColor(0.3f, 0.5f, 0.8f, 0.0f); glEnable(GL_NORMALIZE); glEnable(GL_DEPTH_TEST); glEnable(GL_CULL_FACE); glEnable(GL_MULTISAMPLE); // 陰影付けを無効にする glDisable(GL_LIGHTING); // テクスチャ GLuint imap[mapcount], emap[mapcount]; glGenTextures(mapcount, imap); glGenTextures(mapcount, emap); // テクスチャの読み込み for (size_t i = 0; i < mapcount; ++i) { #if USEMAP loadMap(irrmaps[i], envmaps[i], imap[i], emap[i]); #else createMap(skymaps[i], skysize, imap[i], imapsize, isamples, emap[i], emapsize, esamples, ambient, shininess); #endif } // 放射照度マップのかさ上げに使うテクスチャユニットの設定 glActiveTexture(GL_TEXTURE0); glEnable(GL_TEXTURE_2D); irradiance(); // 放射照度マップのかさ上げに使うテクスチャユニットの設定 glActiveTexture(GL_TEXTURE1); glEnable(GL_TEXTURE_2D); diffuse(); // 環境マップの加算に使うテクスチャユニットの設定 glActiveTexture(GL_TEXTURE2); glEnable(GL_TEXTURE_2D); reflection(); // 材質データ GLuint ng; GLuint (*group)[2]; GLfloat (*amb)[4], (*diff)[4], (*spec)[4], *shi; // 形状データ GLuint nv; GLfloat (*pos)[3], (*norm)[3]; // 形状データの読み込み ggLoadObj(filename, ng, group, amb, diff, spec, shi, nv, pos, norm, false); // ウィンドウが開いている間繰り返す while (window.shouldClose() == GL_FALSE) { // ウィンドウを消去する window.clear(); // テクスチャの選択 const int select(window.getSelection() % mapcount); // 明るさ GLfloat brightness[4]; window.getBrightness(brightness); // 放射照度マップのかさ上げ glActiveTexture(GL_TEXTURE0); glBindTexture(GL_TEXTURE_2D, imap[select]); glTexEnvfv(GL_TEXTURE_ENV, GL_TEXTURE_ENV_COLOR, brightness); // 拡散反射光強度の算出 glActiveTexture(GL_TEXTURE1); glBindTexture(GL_TEXTURE_2D, imap[select]); // 環境マッピング glActiveTexture(GL_TEXTURE2); glBindTexture(GL_TEXTURE_2D, emap[select]); // モデルビュー変換行列の設定 glMatrixMode(GL_MODELVIEW); glLoadIdentity(); // 視点の移動 glTranslatef(window.getPosition()[0], window.getPosition()[1], window.getPosition()[2]); // トラックボール処理による回転 glMultMatrixf(window.getTb()); // シーンの描画 scene(ng, group, diff, spec, nv, pos, norm); // 床の描画 floor(5, -1.0f); // カラーバッファを入れ替えてイベントを取り出す window.swapBuffers(); } }