#include <GL/glut.h>
#include <stdio.h>
#include <iostream>
using namespace std;
void myDisplay(void);
//char * filename=(char *)"d:/aaacpp/点云数据转换/data/人体点云数据_out.asc";
char * filename=NULL; static GLfloat xRot=0.0f;
static GLfloat yRot=0.0f;
int n; float xTmp[];
float yTmp[];
float zTmp[]; void getPoint(char * filename,float * pX,float * pY,float * pZ,int & n)
{
FILE * fp=NULL;
n=;
if (fp = fopen(filename, "r"), fp == NULL)
{
cout << "文件打开失败,文件路径:" << filename << endl;
exit();
}
while(!feof(fp))
{
fscanf(fp,"%f %f %f\n",&pX[n],&pY[n],&pZ[n]);
++n;
//glVertex3f(x/2,y/2,z/2);
}
} void printPoint(float * pX,float * pY,float * pZ,int n)
{
int i=;
float x,y,z;
while(i<n)
{
x=pX[i];
y=pY[i];
z=pZ[i];
glVertex4f(x,y,z,2.0);
++i;
}
} void Display(void)
{
glClear(GL_COLOR_BUFFER_BIT);
glPushMatrix();
glRotatef(xRot,1.0,0.0,0.0);
glRotatef(yRot,0.0,1.0,0.0);
glBegin(GL_POINTS);
glColor3f(1.0,1.0,1.0);//白色
//glVertex2f(0.0f,0.0f);
//glVertex2f(0.5f,0.8f); printPoint(xTmp,yTmp,zTmp,n);
glEnd();
glBegin(GL_LINES);//glBegin和glEnd保证指定的这些点有效
glColor3f(1.0,0.0,0.0);//红色
glVertex3f(0.0,0.0,0.0);
glVertex3f(1.0,0.0,0.0);
glColor3f(0.0,1.0,0.0);//绿色
glVertex3f(0.0,0.0,0.0);
glVertex3f(0.0,1.0,0.0);
glColor3f(0.0,0.0,1.0);//蓝色
glVertex3f(0.0,0.0,0.0);
glVertex3f(0.0,0.0,1.0);
glEnd();
glFlush();//保证前面的命令立即执行
glPopMatrix();
glutSwapBuffers();
} void rDisplay()
{
static int i=;
++i;
glPushMatrix();
glRotatef(0.1*i,1.0f,0.0f,0.0f);
//draw();
glPopMatrix();
glFlush();
//glutSwapBuffers();
} void SpecialKeys(int key,int x,int y)
{
float span=5.0;
switch(key)
{
case GLUT_KEY_UP:
xRot-=span;
break;
case GLUT_KEY_DOWN:
xRot+=span;
break;
case GLUT_KEY_LEFT:
yRot-=span;
break;
case GLUT_KEY_RIGHT:
yRot+=span;
break;
default:
break;
}
xRot=(xRot>360.0)?(xRot-360.0):xRot;
xRot=(xRot<0.0)?(xRot+360.0):xRot;
yRot=(yRot>360.0)?(yRot-360.0):yRot;
yRot=(yRot<0.0)?(yRot+360.0):yRot;
glutPostRedisplay();
} int main(int argc,char* argv[])
{
glutInit(&argc,argv);
filename=(argc==)?argv[]:NULL;
getPoint(filename,xTmp,yTmp,zTmp,n);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE);
glutInitWindowPosition(,);
glutInitWindowSize(,);
glutCreateWindow("Three Window");//直到glutMainLoop才显示窗口
glPointSize(1.0);
glLineWidth(1.0);
glClearColor(0.0,0.0,0.0,0.0);
glClear(GL_COLOR_BUFFER_BIT);
glFlush();
glutSwapBuffers();
glViewport(, , , );
glMatrixMode(GL_MODELVIEW);//设置当前操作的矩阵为模型视图矩阵
//glLoadIdentity();//使当前绘图坐标系与世界坐标系重合
//glTranslatef(0.5,0.5,0.5);//使绘图坐标系相对世界坐标系沿xyz移动
glutDisplayFunc(&Display);
glutSpecialFunc(&SpecialKeys);
//glutIdleFunc(&rDisplay);
glutMainLoop();
return ;
} void myDisplay(void)
{
static int i=;
++i;
glEnable(GL_DEPTH_TEST);
glColor3f(1.0f,,);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
//gluPerspective(75,1,1,40000000);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glRotatef(0.01*i,1.0f,0.0f,0.0f);
//gluLookAt(0,-20000000,-20000000,0,0,0,0,0,1);
glPolygonMode(GL_FRONT, GL_FILL); // 设置正面为填充模式
glPolygonMode(GL_BACK, GL_LINE); // 设置反面为线形模式
glFrontFace(GL_CCW); // 设置逆时针方向为正面
glBegin(GL_POLYGON); // 按逆时针绘制一个正方形,在左下方
glVertex2f(-0.5f, -0.5f);
glVertex2f(0.0f, -0.5f);
glVertex2f(0.0f, 0.0f);
glVertex2f(-0.5f, 0.0f);
glEnd();
glBegin(GL_POLYGON); // 按顺时针绘制一个正方形,在右上方
glVertex2f(0.0f, 0.0f);
glVertex2f(0.0f, 0.5f);
glVertex2f(0.5f, 0.5f);
glVertex2f(0.5f, 0.0f);
glEnd(); glFlush();
glutSwapBuffers();
}

[记录]使用openGL显示点云的一个程序的更多相关文章

  1. [Python 学习]2.5版yield之学习心得 - limodou的学习记录 - limodou是一个程序员,他关心的焦点是Python, DocBook, Open Source …

    [Python 学习]2.5版yield之学习心得 - limodou的学习记录 - limodou是一个程序员,他关心的焦点是Python, DocBook, Open Source - [Pyth ...

  2. 记录一下mac上码云的使用

    项目比较多的时候用第三方的托管平台管理自己的代码还是挺不错的,记录一下码云的基本使用 分两部分进行说明: 一 :怎么上传自己本地的代码到码云.(方式,通过终端输入命令行) 具体的步骤: 1 :首先得在 ...

  3. 第12课 OpenGL 显示列表

    显示列表: 想知道如何加速你的OpenGL程序么?这一课将告诉你如何使用OpenGL的显示列表,它通过预编译OpenGL命令来加速你的程序,并可以为你省去很多重复的代码. 这次我将教你如何使用显示列表 ...

  4. PCL Show Point Cloud 显示点云

    在使用PCL库的时候,经常需要显示点云,可以用下面这段代码: #include <pcl/visualization/cloud_viewer.h> pcl::PointCloud< ...

  5. 重复ID的记录,只显示其中1条

    --重复ID的记录,只显示其中1条 --生成原始表 select * into #tempTable from ( select '1' as id ,'a' as name union all se ...

  6. [工作记录] Android OpenGL ES: non-square texture - continue

    previous: [工作记录] Android OpenGL ES 2.0: square texture not supported on some device recently I found ...

  7. ASP.NET Web API 记录请求响应数据到日志的一个方法

    原文:http://blog.bossma.cn/dotnet/asp-net-web-api-log-request-response/ ASP.NET Web API 记录请求响应数据到日志的一个 ...

  8. 编写一个程序,开启 3 个线程,这三个线程的 ID 分别为 A、B、C,每个线程将自己的 ID 在屏幕上打印 10 遍,要求输出的结果必须按顺序显示。如:ABCABCABC…… 依次递归

    import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.Lock; import java.uti ...

  9. PCL:PCL可视化显示点云

    (1):引用:仅仅是简单的显示点云,可以使用CloudViewer类.这个类非常简单易用.但要注意,它不是线程安全的.如果要用于多线程,还要参考PCLVisualizer. 需要注意的是,PointC ...

随机推荐

  1. 流媒体学习一-------mediastreamer2 的简介

    Mediastreamer2 是一个功能强大且小巧的流引擎,专门为音视频电话应用而开发.这个库为linphone中所有的接收.发送多媒体流提供处理,包括音/视频捕获,编码和解码,渲染. 特性: 接收. ...

  2. 使用多种客户端消费WCF RestFul服务(三)——.net4.5篇

    .net 4.5篇 在.net 4.5下面微软提供了System.Net.Http.dll可以非常方便的使用HTTP请求(其实是用来支持Asp.Net Web Api的,不过我们可以拿过来用) 服务仍 ...

  3. ligerui做分页显示数据

    现在前台技术用到的是ligerui,一直想写一个有关ligerui的显示,利用加班的今天偷点闲复制一下下,当自己的一些小资料吧,不会的时候,还可以来看看............稍微有点多,毕竟是从前后 ...

  4. JavaScript实现在页面上的文本框中输入小写字母自动变为大写字母

    <script language="javascript" type="text/javascript"> $(function () { $(&q ...

  5. OceanBase架构浅析(二)

    单点性能 OceanBase架构的优势在于既支持跨行跨表事务,又支持存储服务器线性扩展.当然,这个架构也有一个明显的缺陷:UpdateServer单点,这个问题限制了OceanBase集群的整体读写性 ...

  6. 详解Spring事件驱动模型

    转载自:http://jinnianshilongnian.iteye.com/blog/1902886#comments 事件驱动模型简介 事件驱动模型也就是我们常说的观察者,或者发布-订阅模型:理 ...

  7. Python之路-python环境安装和简单的语法使用

    一.环境安装 Win10(安装python3.x): 1.下载安装包     https://www.python.org/downloads/   2.安装完成后设置环境变量. 桌面-“计算机”-右 ...

  8. HTML 5 Web 存储-localStorage

    在客户端存储数据 HTML5 提供了两种在客户端存储数据的新方法: localStorage - 没有时间限制的数据存储 sessionStorage - 针对一个 session 的数据存储 之前, ...

  9. APN 推送

    推送的各种状态 http://samwize.com/2015/08/07/how-to-handle-remote-notification-with-background-mode-enabled ...

  10. 深入理解JAVA I/O系列六:Linux中的IO模型

    IO模型 linux系统IO分为内核准备数据和将数据从内核拷贝到用户空间两个阶段. 这张图大致描述了数据从外部磁盘向运行中程序的内存中移动的过程. 用户空间.内核空间 现在操作系统都是采用虚拟存储器, ...