【openGL基础系列】之画一个正方体玩玩吧 您所在的位置:网站首页 正方体五个面怎么画 【openGL基础系列】之画一个正方体玩玩吧

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

2023-08-08 10:58| 来源: 网络整理| 查看: 265

                     【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,本章内容到此结束,更多内容,敬请关注!!! 各位大佬记得点赞关注支持........

 



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有