基于glut库的openGl的机器人手臂代码详解

基于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

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
下面是一个使用Dobot Magician机械手进行五子棋游戏的简单代码: ```python import time from dobot import Dobot def play_five_in_a_row(): dobot = Dobot() # 设置棋盘大小 board_size = 15 # 初始化棋盘 board = [[' ' for _ in range(board_size)] for _ in range(board_size)] # 游戏开始 while(True): # 机械手获取对手的下棋位置 opponent_move = dobot.get_opponent_move(board) # 在棋盘上更新对手的下棋位置 board[opponent_move[0]][opponent_move[1]] = 'O' # 打印当前棋盘状态 print_board(board) # 检查是否有五子连珠 if check_five_in_a_row(board): print("对手赢了!") break # 机械手计算并下下一步棋 dobot_move = dobot.calculate_next_move(board) # 在棋盘上更新机械手的下棋位置 board[dobot_move[0]][dobot_move[1]] = 'X' # 打印当前棋盘状态 print_board(board) # 检查是否有五子连珠 if check_five_in_a_row(board): print("机械手赢了!") break def print_board(board): print('+' + '-'*(len(board[0])*2-1) + '+') for i in range(len(board)): print('|', end='') for j in range(len(board[0])): print(board[i][j], end='|') print('\n+' + '-'*(len(board[0])*2-1) + '+') def check_five_in_a_row(board): # 检查行 for row in board: for i in range(len(row)-4): if row[i] != ' ' and row[i] == row[i+1] == row[i+2] == row[i+3] == row[i+4]: return True # 检查列 for i in range(len(board[0])): for j in range(len(board)-4): if board[j][i] != ' ' and board[j][i] == board[j+1][i] == board[j+2][i] == board[j+3][i] == board[j+4][i]: return True # 检查主对角线 for i in range(len(board)-4): for j in range(len(board[0])-4): if board[i][j] != ' ' and board[i][j] == board[i+1][j+1] == board[i+2][j+2] == board[i+3][j+3] == board[i+4][j+4]: return True # 检查副对角线 for i in range(len(board)-4): for j in range(len(board[0])-4): if board[i][j+4] != ' ' and board[i][j+4] == board[i+1][j+3] == board[i+2][j+2] == board[i+3][j+1] == board[i+4][j]: return True return False # 主函数 if __name__ == '__main__': play_five_in_a_row() ``` 以上代码使用Dobot Magician机械手进行五子棋游戏。代码首先通过Dobot类连接并初始化机械手。然后,使用一个二维列表来表示棋盘,空格表示未下棋的位置。在游戏开始阶段,机械手获取对手的下棋位置,并在棋盘上更新对手的位置。接着,检查是否有五子连珠,如果有则游戏结束,对手赢了。接下来,机械手计算并下下一步棋,并在棋盘上更新机械手的位置。然后,再次检查是否有五子连珠,如果有则游戏结束,机械手赢了。如果没有五子连珠,则循环继续,直到游戏出现胜负或平局。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值