[记录]使用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 ...
随机推荐
- NuGet的几个小技巧
因为是转载文章 在此标明出处,以前有文章是转的没标明的请谅解,因为有些已经无法找到出处,或者与其它原因. 如有冒犯请联系本人,或删除,或标明出处. 因为好的文章,以前只想收藏,但连接有时候会失效,所以 ...
- 实验 snort安装配置与规则编写
1 实验目的 在linux或windows任意一个平台下完成snort的安装,使snort工作在NIDS模式下,并编写符合相关情景要求的snort规则. 2 实验环境 物理机:windows 8.1 ...
- 更改Magento的base url
Magento的Base URL是用于访问商店页面的URL,您也可以为单独一个store view设置一个Base Url.在改这项值之前请确保您的域名已经指向了网站所在服务器的IP,DNS解析完成后 ...
- leetcode:Factorial Trailing Zeroes
Given an integer n, return the number of trailing zeroes in n!. 最初的代码 class Solution { public: int t ...
- iOS苹果开发者客服电话地址
苹果开发者客服电话地址:https://developer.apple.com/contact/phone.php 中国大陆地区客服电话:4006 701 855 中国香港地区客服电话:(852) 2 ...
- mv命令(转)
mv命令是move的缩写,可以用来移动文件或者将文件改名(move (rename) files),是Linux系统下常用的命令,经常用来备份文件或者目录. 1.命令格式: mv [选项] 源文件或目 ...
- 第四篇 SQL Server代理配置数据库邮件
本篇文章是SQL Server代理系列的第四篇,详细内容请参考原文. 正如这一系列的前几篇所述,SQL Server代理作业是由一系列的作业步骤组成,每个步骤由一个独立的类型去执行.SQL Serve ...
- ORA-15260: permission denied on ASM disk group
向ASM磁盘组添加新的磁盘的时候,报了以下错误: $ sqlplus '/as sysdba' SQL*Plus: Release 11.2.0.4.0 Production on Sat Dec 2 ...
- uiwebview加载中文URL
uiwebview加载中文URL _paperGamePath = [_paperGamePath stringByAddingPercentEscapesUsingEncoding:NSUTF8St ...
- MS SQL 多连接数时修改数据库名称
在MS SQL中,如果你想修改某一个数据库的名称,你可以通过下面几种方法实现. 方法一:使用SP_RENAMEDB系统存储过程实现. 语法: sp_renamedb [ @dbname = ] 'ol ...