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 }
  • 相关阅读:
    ffmpeg rtmp推流 视频转码
    java日志发展史 log4j slf4j log4j2 jul jcl 日志和各种桥接包的关系
    nginx stream 流转发,可以转发rtmp、mysql访问流,转发rtmp、jdbc请求
    java web http 转https 通过nginx代理访问
    linux 服务器磁盘挂载
    novnc 通过websockify代理 配置多点访问
    linux 文件服务 minio 安装部署配置
    AOP实现原理,手写aop
    java 泛型
    JAVA反射getGenericSuperclass()用法
  • 原文地址:https://www.cnblogs.com/vanwoos/p/4883368.html
Copyright © 2011-2022 走看看