【openGL基础系列】之画一个正方体玩玩吧

                     【openGL基础系列】之画一个正方体玩玩吧

 

    大家好,我是Lampard~~

    欢迎来到openGL基础系列的博客

    今天讲的是如何在openGL中画一个正方体

    前言:大家都知道,一个正方体包括六个面 ,十二条线。所以我们创造一个正方体的时候既可以使用线的组合,也可以用面的组合来表示。为了让我们更加直观的看到这个正方体,我还在博客上参考了别人的算法,让整个正方体转起来。话不多说我们来看看代码和成品图吧:

    1. 构建正方体的坐标

typedef GLint vertex3[3];
vertex3 pt[8] = {
	{0, 0, 0},
	{0, 1, 0},
	{1, 0, 0},
	{1, 1, 0},
	{0, 0, 1},
	{0, 1, 1},
	{1, 0, 1},
	{1, 1, 1}
};

    2. 构建一个正方形

void quad(GLint n1, GLint n2, GLint n3, GLint n4){
	// 构建一个正方形
	glBegin(GL_QUADS);
	glVertex3iv(pt[n1]);
	glVertex3iv(pt[n2]);
	glVertex3iv(pt[n3]);
	glVertex3iv(pt[n4]);
	glEnd();
}

   3. 构建一个正方体

void cube(void) {
	// 构建六个面
	quad(6, 2, 3, 7);
	quad(5, 1, 0, 4);
	quad(7, 3, 1, 5);
	quad(4, 0, 2, 6);
	quad(2, 0, 1, 3);
	quad(7, 5, 4, 6);
}

   4. 让整个正方体旋转起来

static float rotate = 0;
static int times = 0;

void renderScene(void)
{
	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

	glMatrixMode(GL_MODELVIEW);       // 对模型视景进行操作
	glLoadIdentity();                 // 将当前矩阵设置为单位矩阵
	glPushMatrix();                   // 保存当前的位置

	times++;
	if (times > 100)
	{
		times = 0;
	}

	if (times % 100 == 0)
	{
		rotate += 0.3;
	}
	
	glRotatef(rotate, 0, 1, 0);
	glRotatef(rotate, 1, 0, 0);

	glColor3f(255, 255, 255);

	cube();

	glPopMatrix();                     // 返回之前的位置
	glutSwapBuffers();                 // 使用双缓冲模式存储
}

void main(int argc, char **argv)
{
	glutInit(&argc, argv);
	glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA);  // 使用双缓冲
	glutInitWindowPosition(100, 100);
	glutInitWindowSize(500, 500);
	glutCreateWindow("GLDemo");
	glutDisplayFunc(renderScene);
	glutIdleFunc(renderScene);          // 不断的执行回调直至下一个窗口事件的发生
	glutMainLoop();
}

    以上已经加上了我对代码的备注,对于旋转的算法我暂时也了解得不太清楚,我们就先知道他怎么用,之后再慢慢理解其原理。现在我们来看看我们的成品:

  

 

OK,本章内容到此结束,更多内容,敬请关注!!!

各位大佬记得点赞关注支持........

 

©️2020 CSDN 皮肤主题: 大白 设计师: CSDN官方博客 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值