📄 新建 文本文档.txt
字号:
#include <GL/glut.h>
#include <stdlib.h>
static int shoulder = 0, elbow = 0;//shoulder:肩部角度,elbow: 肘部角度
void init(void)
{
glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
glShadeModel(GL_FLAT);
}
void display(void)
{
glClear(GL_COLOR_BUFFER_BIT);
glPushMatrix();//把当前的变换矩阵压入OpenGL内部栈中,用以保存当前矩阵
//画机器人的上臂
glTranslatef(-1.0f, 0.0f, 0.0f);//用平移矩阵乘当前矩阵,格式为:glTranslatef(x,y,z)
glRotatef((GLfloat) shoulder, 0.0f, 0.0f, 1.0f);//用旋转矩阵乘当前矩阵,格式为glRotatef (角度,x轴,y轴,z轴),这里是绕Z轴旋转
glTranslatef(1.0f, 0.0f, 0.0f);//再用平移矩阵乘当前矩阵,注意顺序
glPushMatrix();//变换矩阵压栈
glScalef(2.0f, 0.4f, 1.0f);//用缩放矩阵乘以当前矩阵,格式为glScalef(x缩放比例,y缩放比例,z缩放比例)
glutWireCube(1.0f);//glut库函数,画一个三维的Cube,参数为边长
glPopMatrix();//弹栈,现在矩阵恢复到使用缩放前的样子
//画机器人的前臂,请注意平移矩阵和旋转矩阵的变化
glTranslatef(1.0f, 0.0f, 0.0f);
glRotatef((GLfloat) elbow, 0.0f, 0.0f, 1.0f);
glTranslatef(1.0f, 0.0f, 0.0f);
glPushMatrix();
glScalef(2.0f, 0.4f, 1.0f);
glutWireCube(1.0f);
glPopMatrix();
glPopMatrix();
glFlush();
}
void reshape (int width, int height)
{
glViewport(0, 0, width, height);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(65.0f, (GLfloat)width/(GLfloat)height, 1.0f, 20.0f);//建立一个透视投影视图体,格式为:gluPerspective(视域的角度,宽高比,视点到近裁剪面的距离(总为正),视点到远裁剪面的距离(总为正))
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glTranslatef(0.0f, 0.0f, -5.0f);//用平移矩阵乘当前矩阵,注意,这会将所有绘制过程中绘制的物体平移
}
void keyboard(unsigned char key, int x, int y)
{
switch (key)
{
case 'a'://处理四个按键,改变旋转角度,转动手臂
shoulder = (shoulder + 5) % 360;
glutPostRedisplay();//重画
break;
case 'd':
shoulder = (shoulder - 5) % 360;
glutPostRedisplay();
break;
case 'q':
elbow = (elbow + 5) % 360;
glutPostRedisplay();
break;
case 'e':
elbow = (elbow - 5) % 360;
glutPostRedisplay();
break;
case 'x':
exit(0);
break;
default:
break;
}
}
int main(int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
glutInitWindowSize(500, 500);
glutInitWindowPosition(100, 100);
glutCreateWindow("Transform");
init();
glutDisplayFunc(display);
glutReshapeFunc(reshape);
glutKeyboardFunc(keyboard);
glutMainLoop();
return 0;
}
一个机器人手臂控制的三维造型。在VC下运行正确,且是opengl编写。希望能用到
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -