[记录]使用openGL显示点云的一个程序
#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显示点云的一个程序的更多相关文章
- [Python 学习]2.5版yield之学习心得 - limodou的学习记录 - limodou是一个程序员,他关心的焦点是Python, DocBook, Open Source …
[Python 学习]2.5版yield之学习心得 - limodou的学习记录 - limodou是一个程序员,他关心的焦点是Python, DocBook, Open Source - [Pyth ...
- 记录一下mac上码云的使用
项目比较多的时候用第三方的托管平台管理自己的代码还是挺不错的,记录一下码云的基本使用 分两部分进行说明: 一 :怎么上传自己本地的代码到码云.(方式,通过终端输入命令行) 具体的步骤: 1 :首先得在 ...
- 第12课 OpenGL 显示列表
显示列表: 想知道如何加速你的OpenGL程序么?这一课将告诉你如何使用OpenGL的显示列表,它通过预编译OpenGL命令来加速你的程序,并可以为你省去很多重复的代码. 这次我将教你如何使用显示列表 ...
- PCL Show Point Cloud 显示点云
在使用PCL库的时候,经常需要显示点云,可以用下面这段代码: #include <pcl/visualization/cloud_viewer.h> pcl::PointCloud< ...
- 重复ID的记录,只显示其中1条
--重复ID的记录,只显示其中1条 --生成原始表 select * into #tempTable from ( select '1' as id ,'a' as name union all se ...
- [工作记录] Android OpenGL ES: non-square texture - continue
previous: [工作记录] Android OpenGL ES 2.0: square texture not supported on some device recently I found ...
- ASP.NET Web API 记录请求响应数据到日志的一个方法
原文:http://blog.bossma.cn/dotnet/asp-net-web-api-log-request-response/ ASP.NET Web API 记录请求响应数据到日志的一个 ...
- 编写一个程序,开启 3 个线程,这三个线程的 ID 分别为 A、B、C,每个线程将自己的 ID 在屏幕上打印 10 遍,要求输出的结果必须按顺序显示。如:ABCABCABC…… 依次递归
import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.Lock; import java.uti ...
- PCL:PCL可视化显示点云
(1):引用:仅仅是简单的显示点云,可以使用CloudViewer类.这个类非常简单易用.但要注意,它不是线程安全的.如果要用于多线程,还要参考PCLVisualizer. 需要注意的是,PointC ...
随机推荐
- java的Random
首先,Point类 public class Point { int x, y; public Point(int x, int y) { this.x = x; this.y = y; } bool ...
- 编写SqlHelper使用,在将ExecuteReader方法封装进而读取数据库中的数据时会产生Additional information: 阅读器关闭时尝试调用 Read 无效问题,解决方法与解释
在自学杨中科老师的视频教学时,拓展编写SqlHelper使用,在将ExecuteReader方法封装进而读取数据库中的数据时 会产生Additional information: 阅读器关闭时尝试调用 ...
- Group GridView:用于.Net的分组显示的GridView
我的项目需要一个可以分组显示的GridView,我不会写,上网找了一圈,最终在国外的网站上找到的这个,比较符合我的要求,但它的分页得重写,它写了能分页,但我发现它的分页功能事实上并没有实现,也不知道是 ...
- 如何在intellj Idea中给新建的项目添加jar包?
1. 假如我加入joda.jar 2. 找到发布的你想要的jar包,下载! 3. 解压刚下载的jar包,复制 4. 在intellj idea中新建一个java项目,然后创建一个专门用于放jar的li ...
- 真不知道JavaScrip【数组】还有这么多东西....
前段时间在频繁的用数组,但一直不知道JavaScript 数组还有这么多东西,收集了一下看看: 首先:数组是对象的特殊形式,接下来看看它有哪些方法.....push()在末尾增加一个或者是多个 uns ...
- 《JAVA NIO》第一章 简介
1.2 CPU已不再是束缚 相反,是JVM 自身在I/O 方面效率欠佳.操作系统与Java 基于流的I/O模型有些不匹配. 操作系统要移动的是大块数据(缓冲区),这往往是在硬件直接存储器存取(DMA) ...
- NSDate如何获取一个月后的日期
NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; NSDateCo ...
- Android --ListView分页
参考博客:Android ListView分页加载(服务端+android端)Demo 监听OnScrollListener事件 class OnListScrollListener implemen ...
- osgEarth编译的一些问题
这两天借着osg培训的机会捯饬了下64位osgearth的编译.遇到了一些问题: 首先我没有编译osg,用的提供的osg3.2.1编译好的64位包. 编译osgearth先后编译了2个版本,先是2.7 ...
- 01.Box2dWeb入门教程
1.下载box2dweb.直接在页面中引用即可. -Box2D.js是未压缩版 -Box2d.min.js是压缩版 2.编写HelloWorld代码. <!DOCTYPE HTML> &l ...