zoukankan      html  css  js  c++  java
  • [记录]使用openGL显示点云的一个程序

      1 #include <GL/glut.h>
      2 #include <stdio.h>
      3 #include <iostream>
      4 using namespace std;
      5 void myDisplay(void);
      6 //char * filename=(char *)"d:/aaacpp/点云数据转换/data/人体点云数据_out.asc";
      7 char * filename=NULL;
      8 
      9 static GLfloat xRot=0.0f;
     10 static GLfloat yRot=0.0f;
     11 int n;
     12 
     13 float xTmp[1200000];
     14 float yTmp[1200000];
     15 float zTmp[1200000];
     16 
     17 void getPoint(char * filename,float * pX,float * pY,float * pZ,int & n)
     18 {
     19     FILE * fp=NULL;
     20     n=0;
     21     if (fp = fopen(filename, "r"), fp == NULL)
     22     {
     23         cout << "文件打开失败,文件路径:" << filename << endl;
     24         exit(0);
     25     }
     26     while(!feof(fp))
     27     {
     28         fscanf(fp,"%f %f %f
    ",&pX[n],&pY[n],&pZ[n]);
     29         ++n;
     30         //glVertex3f(x/2,y/2,z/2);
     31     }
     32 }
     33 
     34 void printPoint(float * pX,float * pY,float * pZ,int n)
     35 {
     36     int i=0;
     37     float x,y,z;
     38     while(i<n)
     39     {
     40         x=pX[i];
     41         y=pY[i];
     42         z=pZ[i];
     43         glVertex4f(x,y,z,2.0);
     44         ++i;
     45     }
     46 }
     47 
     48 void Display(void)
     49 {
     50     glClear(GL_COLOR_BUFFER_BIT);
     51     glPushMatrix();
     52     glRotatef(xRot,1.0,0.0,0.0);
     53     glRotatef(yRot,0.0,1.0,0.0);
     54     glBegin(GL_POINTS);
     55     glColor3f(1.0,1.0,1.0);//白色
     56     //glVertex2f(0.0f,0.0f);
     57     //glVertex2f(0.5f,0.8f);
     58     
     59     printPoint(xTmp,yTmp,zTmp,n);
     60     glEnd();
     61     glBegin(GL_LINES);//glBegin和glEnd保证指定的这些点有效
     62     glColor3f(1.0,0.0,0.0);//红色
     63     glVertex3f(0.0,0.0,0.0);
     64     glVertex3f(1.0,0.0,0.0);
     65     glColor3f(0.0,1.0,0.0);//绿色
     66     glVertex3f(0.0,0.0,0.0);
     67     glVertex3f(0.0,1.0,0.0);
     68     glColor3f(0.0,0.0,1.0);//蓝色
     69     glVertex3f(0.0,0.0,0.0);
     70     glVertex3f(0.0,0.0,1.0);
     71     glEnd();
     72     glFlush();//保证前面的命令立即执行
     73     glPopMatrix();
     74     glutSwapBuffers();
     75 }
     76 
     77 void rDisplay()
     78 {
     79     static int i=0;
     80     ++i;
     81     glPushMatrix();
     82     glRotatef(0.1*i,1.0f,0.0f,0.0f);
     83     //draw();
     84     glPopMatrix();
     85     glFlush();
     86     //glutSwapBuffers();
     87 }
     88 
     89 void SpecialKeys(int key,int x,int y)
     90 {
     91     float span=5.0;
     92     switch(key)
     93     {
     94         case GLUT_KEY_UP:
     95             xRot-=span;
     96             break;
     97         case GLUT_KEY_DOWN:
     98             xRot+=span;
     99             break;
    100         case GLUT_KEY_LEFT:
    101             yRot-=span;
    102             break;
    103         case GLUT_KEY_RIGHT:
    104             yRot+=span;
    105             break;
    106         default:
    107             break;
    108     }
    109     xRot=(xRot>360.0)?(xRot-360.0):xRot;
    110     xRot=(xRot<0.0)?(xRot+360.0):xRot;
    111     yRot=(yRot>360.0)?(yRot-360.0):yRot;
    112     yRot=(yRot<0.0)?(yRot+360.0):yRot;
    113     glutPostRedisplay();
    114 }
    115 
    116 int main(int argc,char* argv[])
    117 {
    118     glutInit(&argc,argv);
    119     filename=(argc==2)?argv[1]:NULL;
    120     getPoint(filename,xTmp,yTmp,zTmp,n);
    121     glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE);
    122     glutInitWindowPosition(200,50);
    123     glutInitWindowSize(800,800);
    124     glutCreateWindow("Three Window");//直到glutMainLoop才显示窗口
    125     glPointSize(1.0);
    126     glLineWidth(1.0);
    127     glClearColor(0.0,0.0,0.0,0.0);
    128     glClear(GL_COLOR_BUFFER_BIT);
    129     glFlush();
    130     glutSwapBuffers();
    131     glViewport(0, 0, 10, 10);
    132     glMatrixMode(GL_MODELVIEW);//设置当前操作的矩阵为模型视图矩阵
    133     //glLoadIdentity();//使当前绘图坐标系与世界坐标系重合
    134     //glTranslatef(0.5,0.5,0.5);//使绘图坐标系相对世界坐标系沿xyz移动
    135     glutDisplayFunc(&Display);
    136     glutSpecialFunc(&SpecialKeys);
    137     //glutIdleFunc(&rDisplay);
    138     glutMainLoop();
    139     return 0;
    140 }
    141 
    142 void myDisplay(void)
    143 {
    144     static int i=0;
    145     ++i;
    146     glEnable(GL_DEPTH_TEST);
    147     glColor3f(1.0f,0,0);
    148     glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    149     glMatrixMode(GL_PROJECTION);
    150     glLoadIdentity();
    151     //gluPerspective(75,1,1,40000000);
    152     glMatrixMode(GL_MODELVIEW);
    153     glLoadIdentity();
    154         glRotatef(0.01*i,1.0f,0.0f,0.0f);
    155     //gluLookAt(0,-20000000,-20000000,0,0,0,0,0,1);
    156     glPolygonMode(GL_FRONT, GL_FILL); // 设置正面为填充模式
    157     glPolygonMode(GL_BACK, GL_LINE);  // 设置反面为线形模式
    158     glFrontFace(GL_CCW);              // 设置逆时针方向为正面
    159     glBegin(GL_POLYGON);              // 按逆时针绘制一个正方形,在左下方
    160         glVertex2f(-0.5f, -0.5f);
    161         glVertex2f(0.0f, -0.5f);
    162         glVertex2f(0.0f, 0.0f);
    163         glVertex2f(-0.5f, 0.0f);
    164     glEnd();
    165     glBegin(GL_POLYGON);              // 按顺时针绘制一个正方形,在右上方
    166         glVertex2f(0.0f, 0.0f);
    167         glVertex2f(0.0f, 0.5f);
    168         glVertex2f(0.5f, 0.5f);
    169         glVertex2f(0.5f, 0.0f);
    170     glEnd();
    171 
    172     glFlush();
    173     glutSwapBuffers();
    174 }
  • 相关阅读:
    Es spring data jpa 修改连接配置
    object转map类型
    记一次项目中yaml文档引发的惨案 (#yaml文档格式#yaml中'-'的作用)
    02-方法重载
    01-数据类型分类
    Centos 7 Sublime 安装 package control
    修改AdminLTE左侧菜单展开延迟
    【Flask】Flask Restful api
    【Flask】Flask常用信号
    【Flask】Flask上下文
  • 原文地址:https://www.cnblogs.com/vanwoos/p/4883368.html
Copyright © 2011-2022 走看看