亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? gui.cpp

?? 移動機器人SLAM,參考一位外國人的碩士論文
?? CPP
字號:
/*  slam3 (c) 2006 Kris Beevers  This file is part of slam3.  slam3 is free software; you can redistribute it and/or modify it  under the terms of the GNU General Public License as published by  the Free Software Foundation; either version 2 of the License, or  (at your option) any later version.  slam3 is distributed in the hope that it will be useful, but WITHOUT  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY  or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public  License for more details.  You should have received a copy of the GNU General Public License  along with slam3; if not, write to the Free Software Foundation,  Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA*/#include "slam.hpp"#include "options.hpp"#include <GL/glut.h>#include <algorithm>extern void process();// in slam.cppextern pose_history_t gps_hist;extern bool done;// FIXME come up with a better way to pass this stuff in#include "rbpf.hpp"#ifdef GRIDSLAM // FIXME deal with these in slam_interface somehowtypedef slam_scan_match mapper_type;//typedef slam_scan_match_2 mapper_type;#elsetypedef slam_interface mapper_type;#endifextern mapper_type mapper;namespace gui {const char *title_prefix = "SLAM2 - ";int mouse_x, mouse_y;bool paused = false, movie = false, mouse_left = false, mouse_right = false;uint32_t redraw_freq = 1;int viewport_w, viewport_h, viewport_w_orig, viewport_h_orig;double workspace_w, workspace_h, scale = 1, trans_x, trans_y, extra_x, extra_y;uint32_t ss_count = 0;char ss_fn[256];bool screenshot(const char *prefix){  sprintf(ss_fn, "%s%08d.ppm", prefix, ss_count);  ++ss_count;  unsigned int size = 3 * viewport_w * viewport_h;  unsigned char *buffer = new unsigned char[size];  memset(buffer, 0, size);  glPixelStorei(GL_PACK_ALIGNMENT, 1);  glReadPixels(0, 0, viewport_w, viewport_h, GL_RGB, GL_UNSIGNED_BYTE, buffer);  FILE *out = fopen(ss_fn, "wb");  if(!out)    return false;  fprintf(out, "P6\n%d\n%d\n255\n", viewport_w, viewport_h);  const unsigned char *pix;  int y, x;  // this will flip the y-axis  for(y = viewport_h - 1; y >= 0; --y) {    for(x = 0; x < int(viewport_h); ++x) {      pix = &buffer[3*(y*viewport_w+x)];      fwrite(pix, 3, 1, out);    }  }  fclose(out);  return true;}void idle(){  if(!paused) {    for(uint32_t i = 0; i < redraw_freq; ++i)      process();    glutPostRedisplay();  } else    usleep(100000);}void display(){  glClearColor(0.7, 0.7, 0.7, 1);  glClear(GL_COLOR_BUFFER_BIT);  glMatrixMode(GL_PROJECTION);  glLoadIdentity();  gluOrtho2D(scale * (-workspace_w / 2 + trans_x),	     scale * (workspace_w / 2 + trans_x + extra_x),	     scale * (-workspace_h / 2 + trans_y),	     scale * (workspace_h / 2 + trans_y + extra_y));  glMatrixMode(GL_MODELVIEW);  glLoadIdentity();  // because occupancy grid data is stored at a different orientation  glRotatef(-90, 0, 0, 1);  // axes  glLineWidth(1);  glColor3f(0.8,0.8,0.8);  glBegin(GL_LINES);  glVertex2d(-100000, 0); glVertex2d(100000, 0);  glVertex2d(0, -100000); glVertex2d(0, 100000);  glEnd();  glColor3f(0.0, 0.25, 0.25);  gps_hist.render(); // gps trajectory  mapper.render();  glutSwapBuffers();  if(movie)    screenshot("movie/");}void reshape(int width, int height){  glViewport(0, 0, width, height);  viewport_w = width;  viewport_h = height;  extra_x = workspace_w * (float(width) - viewport_w_orig) / float(viewport_w_orig);  extra_y = workspace_h * (float(height) - viewport_h_orig) / float(viewport_h_orig);}void keyboard(uint8_t key, int x, int y){  switch(key) {  case 'Q': // quit  case 'q':    printf("\ngoodbye\n");    if(!done)      mapper.write_to_file("output");    exit(0);  case 'S': // screenshot  case 's':    screenshot("");    printf("wrote %s\n", ss_fn);    break;  case 'M': // start/stop dump every screen (for movie)  case 'm':    movie = !movie;    printf(movie ? "dumping every frame to movie/...\n" : "stopped dumping frames\n");    break;  case 'N': // process one step if paused  case 'n':    if(paused) {      printf("processing one step, press SPACE for full throttle\n");      process();    }    break;  case ' ': // pause    paused = !paused;    printf(paused ? "\npaused, press SPACE to continue\n" : "unpaused\n");    return; // no redisplay  }  glutPostRedisplay();}void mouse(int button, int state, int x, int y){  mouse_x = x;  mouse_y = y;  if(state == GLUT_UP) {    if(button == GLUT_LEFT_BUTTON) mouse_left = false;    else if(button == GLUT_RIGHT_BUTTON) mouse_right = false;  } else {    if(button == GLUT_LEFT_BUTTON) mouse_left = true;    else if(button == GLUT_RIGHT_BUTTON) mouse_right = true;  }}void motion(int x, int y){  int dx = x - mouse_x, dy = y - mouse_y;  if(dx == 0 && dy == 0)    return;  if(mouse_left) { // pan    trans_x -= workspace_w * float(dx) / float(viewport_w_orig);    trans_y += workspace_h * float(dy) / float(viewport_h_orig);  } else if(mouse_right) // zoom    scale *= exp(0.05 * double(dy) + 0.01);  mouse_x = x;  mouse_y = y;  if(mouse_left || mouse_right)    glutPostRedisplay();}void special(int key, int x, int y){  if(key == GLUT_KEY_HOME) {    scale = 1.0;    trans_x = trans_y = 0.0;  }  glutPostRedisplay();}void run(int argc, char **argv, const char *filename){  // get commandline options that we use for rendering  viewport_w = viewport_w_orig = std::max(options::quickget<int>("gui-width"), 1);  viewport_h = viewport_h_orig = std::max(options::quickget<int>("gui-height"), 1);  workspace_w = std::max(options::quickget<double>("workspace-width"), 0.1);  workspace_h = std::max(options::quickget<double>("workspace-height"), 0.1);  redraw_freq = std::max(options::quickget<uint32_t>("redraw-freq"), 1u);  movie = options::quickget<bool>("movie");  // set up renderer  glutInit(&argc, argv);  glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE);  glutInitWindowSize(viewport_w, viewport_h);  char *title = new char[strlen(title_prefix) + strlen(filename) + 1];  sprintf(title, "%s%s", title_prefix, filename);  glutCreateWindow(title);  glutDisplayFunc(display);  glutReshapeFunc(reshape);  glutKeyboardFunc(keyboard);  glutMouseFunc(mouse);  glutMotionFunc(motion);  glutSpecialFunc(special);  glutIdleFunc(idle);  glutMainLoop();}}; // namespace gui

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚欧色一区w666天堂| 亚洲乱码国产乱码精品精98午夜| 97久久精品人人做人人爽50路| 国产一区二区三区综合| 国内久久婷婷综合| 国产精品一品二品| 成人免费毛片嘿嘿连载视频| 播五月开心婷婷综合| 91蜜桃在线免费视频| 欧美性受xxxx黑人xyx| 欧美精品18+| 精品成人一区二区| 国产精品久久久久久久久快鸭 | 午夜不卡av在线| 日韩精品国产欧美| 免费国产亚洲视频| 国产剧情一区在线| 在线观看av一区二区| 欧美日韩亚洲综合一区二区三区| 日韩区在线观看| 国产午夜亚洲精品不卡| 综合久久国产九一剧情麻豆| 亚洲成人动漫一区| 国产一区二区h| 在线中文字幕一区| 精品免费视频一区二区| 国产精品亲子伦对白| 亚洲国产另类精品专区| 国产制服丝袜一区| 欧美性大战久久久| 国产亚洲福利社区一区| 亚洲国产一区二区a毛片| 国产一区二区美女| 欧美色手机在线观看| 精品久久久久久久久久久院品网 | 日韩电影在线看| 国产精品系列在线观看| 欧美在线观看一区二区| 26uuu国产日韩综合| 一区二区三区丝袜| 国产米奇在线777精品观看| 一本一道久久a久久精品| 日韩美女在线视频| 亚洲色图欧洲色图婷婷| 精品伊人久久久久7777人| 色呦呦网站一区| 精品日韩成人av| 午夜精品福利视频网站| 成人免费毛片嘿嘿连载视频| 日韩一级免费一区| 亚洲成人激情av| 北条麻妃一区二区三区| 精品捆绑美女sm三区| 亚洲高清一区二区三区| 波多野结衣在线aⅴ中文字幕不卡| 欧美日韩极品在线观看一区| 亚洲色图都市小说| 成人在线视频一区二区| 精品国产一区二区精华| 毛片不卡一区二区| 亚洲综合在线电影| 国产精品亚洲一区二区三区妖精| 欧美电影影音先锋| 亚洲v中文字幕| 欧美日韩三级在线| 亚洲国产成人va在线观看天堂| 91小视频免费观看| 亚洲欧洲日韩av| 不卡av免费在线观看| 国产精品乱码一区二三区小蝌蚪| 久久99国产精品麻豆| 欧美一级日韩免费不卡| 日本大胆欧美人术艺术动态 | 国产亚洲女人久久久久毛片| 免费在线看成人av| 精品国产伦一区二区三区免费| 日韩精品久久理论片| 欧美欧美午夜aⅴ在线观看| 亚洲一区电影777| 欧美精品粉嫩高潮一区二区| 日韩av不卡在线观看| 678五月天丁香亚洲综合网| 日本视频在线一区| 精品人伦一区二区色婷婷| 国产一区二三区好的| 国产精品欧美久久久久一区二区| kk眼镜猥琐国模调教系列一区二区| 成人免费小视频| 欧美日韩国产一二三| 蜜臀a∨国产成人精品| 精品少妇一区二区三区视频免付费 | 91黄色免费版| 亚洲成人免费电影| 久久亚洲精品国产精品紫薇| 国产精品亚洲人在线观看| 亚洲久本草在线中文字幕| 精品视频999| 国产乱码字幕精品高清av| 中文在线一区二区| 欧美写真视频网站| 国产在线乱码一区二区三区| 中文字幕乱码日本亚洲一区二区 | 午夜av区久久| 精品国产凹凸成av人网站| 欧美喷潮久久久xxxxx| 蜜桃免费网站一区二区三区| 中文欧美字幕免费| 欧美午夜一区二区三区| 狠狠色狠狠色合久久伊人| 中文字幕一区二区日韩精品绯色| 欧美日韩成人高清| 成人免费观看男女羞羞视频| 天天做天天摸天天爽国产一区 | 日韩免费视频线观看| eeuss国产一区二区三区| 日韩在线观看一区二区| 亚洲色图在线播放| 久久精品无码一区二区三区| 欧美日精品一区视频| 成人午夜视频网站| 七七婷婷婷婷精品国产| 亚洲精品欧美专区| 国产欧美精品一区二区色综合 | 欧美日韩亚洲高清一区二区| 国产精品影视网| 日本不卡视频一二三区| 亚洲精品老司机| 国产精品久久久99| 久久女同互慰一区二区三区| 91精品国产综合久久久久久久久久| 99re视频精品| 成人app网站| 国产激情精品久久久第一区二区 | 日韩视频一区二区在线观看| 91在线播放网址| 成人教育av在线| 国产在线精品一区在线观看麻豆| 日本欧美一区二区在线观看| 亚洲精品免费在线观看| 日韩理论片一区二区| 中文字幕一区二区三区不卡在线 | 国产精品丝袜久久久久久app| 日韩欧美不卡一区| 日韩欧美国产精品一区| 91精品国产一区二区三区蜜臀| 欧美自拍偷拍一区| 91极品视觉盛宴| 欧美三级在线看| 国产成人精品综合在线观看 | 国产精品不卡在线| 国产精品女主播av| 国产欧美一区二区三区在线老狼| 久久久国际精品| 国产日产欧美一区| 国产精品视频一区二区三区不卡| 久久久久亚洲综合| 国产日产亚洲精品系列| 国产精品久久久久影视| 亚洲天堂福利av| 亚洲自拍与偷拍| 日韩电影在线一区二区| 美国精品在线观看| 国产福利一区二区| 99久久久精品| 欧美日韩精品系列| 精品日产卡一卡二卡麻豆| xnxx国产精品| 国产精品免费久久久久| 中文字幕亚洲成人| 亚洲福利视频导航| 国产另类ts人妖一区二区| 大尺度一区二区| 欧美日韩日本视频| 久久久蜜桃精品| 中文字幕综合网| 奇米精品一区二区三区在线观看| 狠狠色综合日日| 91久久精品国产91性色tv| 日韩一区二区免费电影| 国产午夜亚洲精品理论片色戒| 日韩美女精品在线| 免费观看一级特黄欧美大片| 成人免费高清在线| 欧美人与性动xxxx| 国产亚洲一区字幕| 亚洲亚洲精品在线观看| 国产一区久久久| 在线观看亚洲a| 国产视频不卡一区| 午夜成人免费电影| 99久久国产综合精品色伊| 日韩免费观看2025年上映的电影| 亚洲欧洲国产日本综合| 久久www免费人成看片高清| 91视频.com| 久久久久久久一区| 天天影视涩香欲综合网 | 亚洲综合精品久久| 粉嫩绯色av一区二区在线观看| 4438x亚洲最大成人网|