初识OpenGL

30 篇文章 0 订阅
15 篇文章 0 订阅

之前介绍过OpenGL在VS2010上的安装,相信这个不难,不过需要记得每次在建立OpenGL工程的时候需要加载相关的lib库文件,如opengl32.lib;glu32.lib;glut32.lib

这次看看OpenGL在画二维图形的时候的基本构成。


#include <windows.h>
#include <gl/glut.h>
#include <cstdlib>
#include <iostream>

#pragma comment(lib, "glut32.lib")

void Display();
void Load();
void init();

struct vertex //x,y,z points
{
	float x;
	float y;
	float z;
};

struct tri   //Endpoint definition
{
	struct vertex a;
	struct vertex b;
};

struct model  //Global structure
{
	struct tri* tris;  //Line
	int tris_num;  //Number of input vertex
};

model test;

int main(int argc, char* argv[])
{
	glutInit(&argc, argv);
	glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);  //Single cache and RGBA model
	glutInitWindowPosition(200, 100);
	glutInitWindowSize(500, 500);
	glutCreateWindow("demo");  // name of window
	init();
	Load();
	glutDisplayFunc(Display);  //Register
	glutMainLoop(); // Enter main loop to deal
	if (test.tris)
		free(test.tris);
	return 0;
}  //end main

void Load()   // Read the data of Coord
{
	if (test.tris)
		free(test.tris);

	FILE* file = fopen("coord.txt", "r");
	int i = 0;

	if (!file)
		return;

	fscanf(file, "%d", &test.tris_num);
	test.tris = (tri*)malloc(sizeof(struct tri) * test.tris_num);

	while (i < test.tris_num)
	{
		fscanf(file, "%f%f%f", &test.tris[i].a.x, &test.tris[i].a.y, &test.tris[i].a.z);
		fscanf(file, "%f%f%f", &test.tris[i].b.x, &test.tris[i].b.y, &test.tris[i].b.z);
		++i;
	}
	fclose(file);
} //end Load

void Display()  //OpenGL display
{
	int i = 0;
	glClear(GL_COLOR_BUFFER_BIT); //Clear all pixels
	//glMatrixMode(GL_PROJECTION);
	//gluPerspective(45.f, 1.f, 0.f, 100.f);
	//glMatrixMode(GL_MODELVIEW);
	//gluLookAt(0.f, 0.f, 5.f, 0.f, 0.f, 0.f, 0.f, 1.f, 0.f);
	glColor3f(1.0, 1.0, 1.0);
	glBegin(GL_LINES);   //Draw line beginning
	while (i < test.tris_num)
	{
		glVertex3f(test.tris[i].a.x, test.tris[i].a.y, test.tris[i].a.z);
		glVertex3f(test.tris[i].b.x, test.tris[i].b.y, test.tris[i].b.z);
		++i; 
	}
	glEnd();  //Draw line end
	glFlush();
}// end Display

void init()  //OpenGL init
{
	glClearColor(0.0, 0.0, 0.0, 0.0) ; //Clear color specified

	/*   Init view frustum      */
	glMatrixMode(GL_PROJECTION);
	glLoadIdentity();
	glOrtho(0.0, 1.0, 0.0, 1.0, -1.0, 1.0) ;
} // end init

我自定义了三个函数Dispaly(), Load(), init(),分别用来显示图形,加载数据,初始化界面的。


Display函数里面主要实现渲染场景的操作;

Load函数是用来从外界读取数据以实现画图;

init函数里面主要实现背景颜色和坐标系统的操作。


另外,各个函数里面的函数调用都已经做了注释,应该很容易看明白,已经在VS2010中调试成功。




  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值