基于glut库的openGl的机器人手臂代码详解
机器人手臂源代码网址:
https://blog.csdn.net/yueyansheng2/article/details/54095346?utm_source=blogxgwz4
Study Process
glClearColor(0.0, 0.0, 0.0, 0.0);
【glClearColor ( ) 就是用来设置这个 “ 底色 ” 的,即所谓的背景颜色。glClearColor ( ) 只起到Set 的作用,并不Clear 任何。
void glClearColor(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha);红、绿、蓝和 alpha 值,alpha 指定颜色中的α成分,指定值范围均为[ 0.0f,1.0f ]
glClearColor(1.0, 0.0, 0.0, 1.0);//红色
参考CSDN网址:https://blog.csdn.net/hebbely/article/details/69951068
】
glShadeModel(GL_FLAT);
【glShadeModel ( ) 函数用于控制颜色的过渡模式。 绘制指定两点间其他点颜色的过渡模式。
参数一般为 GL_SMOOTH ( 默认 ) 或 GL_FLAT。GL_SMOOTH 会出现过渡效果】
glClear(GL_COLOR_BUFFER_BIT);
【glClear ( ) 是用来清除屏幕颜色,即将屏幕的所有像素点都还原为 “底色 ”
void glClear(GLbitfield mask);mask 对指定需要清除的缓存进行按位或屏蔽操作,值如下表:
GL_COLOR_BUFFER_BIT 指定当前被激活为写操作的颜色缓存
GL_DEPTH_BUFFER_BIT 深度缓存
GL_ACCUM_BUFFER_BIT 累加缓存
GL_STENCIL_BUFFER_BIT 模板缓存】
glPushMatrix();
【功能是将当前矩阵堆栈推送,用法是void WINAPI glPushMatrix(void)
将需要执行的缩放、平移等操作放在glPushMatrix和glPopMatrix之间
https://blog.csdn.net/qq_16334327/article/details/78258183
】
glTranslatef(-1.0, 0.0, 0.0);
【沿着 X, Y 和 Z 轴移动。
1.X坐标轴从左至右,Y坐标轴从下至上,Z坐标轴从里至外。
2.OpenGL屏幕中心的坐标值是X和Y轴上的0.0f点。
3.中心左面的坐标值是负值,右面是正值。 移向屏幕顶端是正值,移向屏幕底端是负值。 移入屏幕深处是负值,移出屏幕则是正值。
https://blog.csdn.net/code_ac/article/details/60970103
】
glRotatef((GLfloat)shoulder, 0.0, 0.0, 1.0);
【glRotatef(angle, x, y, z) 】
glScalef(2.0, 0.4, 1.0);
【模型缩放函数,这个物体的每个点的x,y,z坐标与对应的xyz参数相乘。
void glScalef(GLfloat x, GLfloat y, GLfloat z);
如glScalef(2.0f,3.0f,4.0f);将模型按x,y,z方向分别拉伸了2,3,4倍。
参数也可取负数,也可以理解为先关于某轴翻转180°,再缩放
如glScalef(1.0f,1.0f,-2.0f);将模型关于z轴翻转了180°,再拉伸2倍。
https://blog.csdn.net/code_ac/article/details/62054366
】
glutWireCube(1.0);
【画线框立方体
void glutWireCube(GLdouble size);
https://blog.csdn.net/Augusdi/article/details/7076734
】
glutSwapBuffers()
【实现双缓冲技术,该函数的功能是交换两个缓冲区指针。
缓冲explain:通常, 我们所看到的窗体、文字、图像,从根本上来说都是“画”出来的。比如,制作一个简单的五子棋, 我们可能先要绘制棋盘,然后绘制棋子,我们可能还要绘制一些提示信息。虽然这些绘制操作有一定的先后顺序,通常情况下,操作系统的这些绘制速度非常的快,使人眼误认为这些绘制操作是同时完成的。但当我们进行复杂的绘图操作时,画面便可能有明显的闪烁。解决这个问题的关键在于使绘制的东西同时出现在屏幕上。所谓双缓冲技术, 是指使用两个缓冲区: 前台缓冲和后台缓冲。前台缓冲即我们看到的屏幕,后台缓冲则在内存当中,对我们来说是不可见的。每次的所有绘图操作都在后台缓冲中进行, 当绘制完成时, 把绘制的最终结果复制到屏幕上, 这样, 我们看到所有GDI元素同时出现在屏幕上,从而解决了频繁刷新导致的画面闪烁问题。
https://blog.csdn.net/u012442207/article/details/45223261
】
glViewport(0, 0, (GLsizei)w, (GLsizei)h);
【在OpenGL初始化完成之后,我们应该进行一些视图设置。首先是设定视见区域,调用glViewPort函数来决定视见区域,即告诉OpenGL应把渲染之后的图形绘制在窗体的哪个部位
参数X,Y指定了视见区域的左下角在窗口中的位置,一般情况下为(0,0),Width和Height指定了视见区域的宽度和高度。
glViewport(GLint x,GLint y,GLsizei width,GLsizei height)为其函数原型。https://blog.csdn.net/sj19890401/article/details/19976667
】
glMatrixMode(GL_PROJECTION);
【这个函数其实就是对接下来要做什么进行一下声明
也就是在要做下一步之前告诉计算机我要对“什么”进行操作了,这个“什么”在glMatrixMode的“()”里的选项(参数)有3种模式: GL_PROJECTION 投影, GL_MODELVIEW 模型视图, GL_TEXTURE 纹理.
在操作投影矩阵以前,需要调用函数:glMatrixMode(GL_PROJECTION); //将当前矩阵指定为投影矩阵
然后把矩阵设为单位矩阵:glLoadIdentity();
然后调gluPerspective(),它们生成的矩阵会与当前的矩阵相乘,生成透视的效果;
https://blog.csdn.net/jing16337305/article/details/80337800
】
glLoadIdentity();
【函数的功能是重置当前指定的矩阵为单位矩阵 单位矩阵就是对角线上都是1,其余元素皆为0的矩阵。
是用一个4×4的单位矩阵来替换当前矩阵,实际上就是对当前矩阵进行初始化,也就是说,在该命令执行后,当前矩阵均恢复成一个单位矩阵
当您调用glLoadIdentity()之后,您实际上将当前点移到了屏幕中心:类似于一个复位操作
https://blog.csdn.net/caoshangpa/article/details/80264007
】
gluPerspective(65.0, (GLfloat)w / (GLfloat)h, 1.0, 20.0)
【fovy,眼睛睁开的角度,如果为180,那么可以认为你的视界很广阔;
aspect,这个好理解,就是实际窗口的纵横比,即x/y,影响到视野的截面有多大。
zNear,近裁剪面到眼睛的距离
zFar表示远裁剪面到眼睛的距离
gluPerspective(GLdouble fovy,GLdouble aspect,GLdouble zNear,GLdouble zFar)
https://blog.csdn.net/tyxkzzf/article/details/40921713
】
glMatrixMode(GL_MODELVIEW);
【GL_MODELVIEW是对模型视景矩阵操作 接下来的语句描绘一个以模型为基础的适应
glMatrixMode是用来指定哪一个矩阵是当前矩阵,而它的参数代表要操作的目标,GL_PROJECTION是对投影矩阵操作,GL_TEXTURE是对纹理矩阵进行随后的操作。
切换当前矩阵,置透视投影设置完成后开始画图,需要切换到 模型视图矩阵 才能正确画图.glMatrixMode(GL_MODELVIEW);
https://blog.csdn.net/siyue0211/article/details/74784170
】