用OpenGL如何读取txt文档中的数据并画点

viqlegg 2014-11-23 03:09:48
TXT文件中每一行的前两个数字是点的X和Y的坐标,Z的坐标都为零,大概要画两百多个点
怎么读取每一行的数据并循环的画点?
...全文
995 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
victor_woo 2014-11-25
  • 打赏
  • 举报
回复
1:读点, txt文件 FILE fopen函数打开 按行读取char* 用 sscanf获取 三个数值,构造点数据数组 2:显示:找一个可用的OpenGL程序框架,建议用RedBook中前面几节的,其中有个显示固定白色方块的程序 3:可以用不同方式显示出你的点数据 GL_POINTS GL_LINE_TRIP(推荐) 也可画小球
shiter 2014-11-23
  • 打赏
  • 举报
回复
这有几个类似的: http://blog.csdn.net/augusdi/article/details/20232445



#include<GL/glut.h>

void display()
  {
	glClear(GL_COLOR_BUFFER_BIT);
glMatrixMode(GL_MODELVIEW);
	glLoadIdentity();
		gluLookAt(1.0,1.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0);
		glutWireCube(0.5);
			glutSwapBuffers();
 }


  void reshape(int w,int h)
{
	glViewport(0,0,w,h);
	glMatrixMode(GL_PROJECTION);
	glLoadIdentity();
	glOrtho(-4.0,4.0,-4.0,4.0,-4.0,4.0);
  }

 void init()
{
		glClearColor(1.0,1.0,1.0,1.0);
		glColor3f(0.0,0.0,0.0);
	  
  }


#include <gl/glut.h>
#include <gl/gl.h>
#include <math.h>

 static GLfloat GL_PI = 3.14159f;

 //绘制场景
 static void RenderSences()
 {
	 GLfloat z = -50.0f;  
	 //清空画布
	 glClear(GL_COLOR_BUFFER_BIT);
	 //设置画图使用的颜色
	 glColor3f(1.0f, 0.0f, 0.0f);
	 //保存矩阵
	 glPushMatrix();
	 //旋转, 如果不旋转,那些不同层次的点都重叠在一起,看不出3D效果了。
	 glRotatef(200.0f, 1.0f, 0.0f, 0.0f);
	 glRotatef(120.5f, 0.0f, 1.0f, 0.0f);
	 //获取点的大小的范围,以及增长的步长
	 GLfloat size[2];
	 GLfloat sizeStep;
	 glGetFloatv(GL_POINT_SIZE_RANGE, size);
	 glGetFloatv(GL_POINT_SIZE_GRANULARITY, &sizeStep);
	 GLfloat curStep = size[0];
	 for (GLfloat a = 0.0; a < GL_PI * 3.0f; a += 0.1f)
	 {
		 GLfloat x = 50.0f * cos(a);
		 GLfloat y = 50.0f * sin(a);
		 //设置点的大小
		 glPointSize(curStep);
		 curStep += sizeStep;
		 //设置顶点
		 glBegin(GL_POINTS);
		 glVertex3f(x, y, z);
		 glEnd();
		 //调整z值
		 z += 0.5f;
	 }
	 glPopMatrix();    
	 glFlush();
 }

 void ChangeSize(GLsizei w, GLsizei h)
 {
	 GLfloat nRange = 100.0f;
	 if (h == 0)
	 {
		 h = 1;
	 }
	 //设置视口
	 glViewport(0, 0, w, h);
	 glMatrixMode(GL_PROJECTION);
	 glLoadIdentity();

	 //设置可视区域
	 GLfloat aspect = (GLfloat)w / (GLfloat)h;
	 if (w <= h)
	 {
		 glOrtho(-nRange, nRange, -nRange/aspect, nRange/aspect, -nRange, nRange);
	 }
	 else
	 {
		 glOrtho(-nRange*aspect, nRange*aspect, -nRange, nRange, -nRange, nRange);
	 }

	 glMatrixMode(GL_MODELVIEW);
	 glLoadIdentity();
 }
 //初始化工作
 static void SetupRC()
 {
	 glClearColor(0.0f, 1.0f, 0.0f, 1.0f);
 }
 //创建窗口
 static void CreateWindow() 
 {
	 glutInitWindowSize(200, 200);
	 glutCreateWindow("3d Points");
 }

 int main(int args, char **argv)
 {
	 glutInit(&args, argv);
	 glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
	 glutInitWindowSize(200, 200);
	 glutCreateWindow("draw points");
	 SetupRC();
	 glutDisplayFunc(RenderSences);    
	 glutReshapeFunc(ChangeSize);
	 glutMainLoop();
	 return 0;
 }

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧