分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!http://www.captainbed.net
基于OpenGL的三维机器人仿真
#include<windows.h>
#include<gl/glut.h>
#pragma comment(lib,"glut32.lib")
#include <iostream>
using namespace std;
GLfloat no_mat[] = { 0.0,0.0,1.0 };
GLfloat mat_ambient[] = { 0.8,0.8,1.0 };
GLfloat mat_ambient_color[] = { 0.8,0.2,1.0 };
GLfloat mat_diffuse[] = { 0.5,1.0 };
GLfloat mat_specular[] = { 1.0,0.5,1.0 };
GLfloat no_shininess[] = { 0.5 };
GLfloat low_shininess[] = { 5.0 };
GLfloat high_shininess[] = { 100.0 };
GLfloat mat_emission[] = {0.3,0.0};
static int angle = 0,neck = 0,lshoulder = 0,lelbow = 0,rshoulder = 0,relbow = 0,lhips = 0,rhips = 0,lfoot = 0,rfoot = 0,flagneck = 0,flaglshoulder = 0,flaglelbow = 0,flagrshoulder = 0,flagrelbow = 0,flaglhips = 0,flagrhips = 0,flaglfoot = 0,flagrfoot = 0;
void init(void) {
GLfloat ambient[] = { 0.0,1.0 };
GLfloat diffuse[] = { 1.0,1.0,1.0 };
GLfloat position[] = { 0.0,5.0,10.0,0.0 };
GLfloat lmodel_ambient[] = { 0.4,0.4,1.0 };
GLfloat local_view[] = { 0.0 };
glClearColor(0,0,0);
glLightfv(GL_LIGHT0,GL_AMBIENT,ambient);
glLightfv(GL_LIGHT0,GL_DIFFUSE,diffuse);
glLightfv(GL_LIGHT0,GL_POSITION,position);
gllightmodelfv(GL_LIGHT_MODEL_AMBIENT,lmodel_ambient);
gllightmodelfv(GL_LIGHT_MODEL_LOCAL_VIEWER,local_view);
glShadeModel(GL_SMOOTH);
glEnable(GL_DEPTH_TEST);
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
}
void draw_body(void) {
glPushmatrix();
glTranslatef(0,1.5,0);
glScalef(0.5,1,0.4);
glMaterialfv(GL_FRONT,mat_ambient_color);
glMaterialfv(GL_FRONT,mat_diffuse);
glMaterialfv(GL_FRONT,GL_specular,mat_specular);
glMaterialfv(GL_FRONT,GL_SHINInesS,high_shininess);
glMaterialfv(GL_FRONT,GL_EMISSION,no_mat);
glutSolidCube(4); ;
glPopMatrix();
}
void draw_leftshoulder(void) {
glPushmatrix();
glMaterialfv(GL_FRONT,no_mat);
glMaterialfv(GL_FRONT,no_shininess);
glMaterialfv(GL_FRONT,no_mat);
glTranslatef(1.5,3,0);
glrotatef(lshoulder,0);
glTranslatef(0,-0.5,0);
glScalef(0.4,0.5);
glutSolidCube(2);
glScalef(1 / 0.4,1 / 1,1 / 0.5);
glTranslatef(0,-1.4,0);
glrotatef(lelbow,0);
glutWireSphere(0.4,200,500);
glScalef(0.4,0.5);
glTranslatef(0,0);
glutSolidCube(2);
glPopMatrix();
}
void draw_rightshoulder(void) {
glPushmatrix();
glMaterialfv(GL_FRONT,no_mat);
glTranslatef(-1.5,0);
glrotatef(rshoulder,0.5);
glutSolidCube(2);
glScalef(1/0.4,1/1,1/0.5);
glTranslatef(0,0);
glrotatef(relbow,500);
glScalef(0.4,0);
glutSolidCube(2);
glPopMatrix();
}
void draw_head(void) {
glPushmatrix();
glMaterialfv(GL_FRONT,low_shininess);
glMaterialfv(GL_FRONT,no_mat);
glTranslatef(0,3.5,0);
glrotatef(neck,1);
glTranslatef(0,0);
glutWireSphere(1,500);
glPopMatrix();
}
void draw_leftfoot(void) {
glPushmatrix();
glMaterialfv(GL_FRONT,no_mat);
glTranslatef(-0.6,-0.6,0);
glrotatef(lfoot,0);
glTranslatef(0,-1,0);
glrotatef(lhips,0);
glutSolidCube(2);
glPopMatrix();
}
void draw_rightfoot(void) {
glPushmatrix();
glMaterialfv(GL_FRONT,no_mat);
glTranslatef(0.6,0);
glrotatef(rfoot,0);
glrotatef(rhips,0);
glutSolidCube(2);
glPopMatrix();
}
void display(void) {
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPushmatrix();
glrotatef(angle,4,0);
draw_body();
draw_head();
draw_leftshoulder();
draw_rightshoulder();
draw_leftfoot();
draw_rightfoot();
glPopMatrix();
glutSwapBuffers();
}
void reshape(int w,int h) {
glViewport(0,w,h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(-8,8,-8,-10,10);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt (0.0,4.0,10,0.0);
}
void keyboard(unsigned char key,int x,int y) {
switch(key)
{
case ‘1‘:
angle=(angle+5)%360;
glutPostRedisplay();
break;
case ‘2‘:
angle=(angle-5)%360;
glutPostRedisplay();
break;
case ‘3‘:
if(flagneck)
{
neck=neck+5;
if(neck>=30)flagneck=0;
}
else{
neck=neck-5;
if(neck<=-30)flagneck=1;
}
glutPostRedisplay();
break;
case ‘4‘:
if(flaglshoulder)
{
lshoulder+=5;
if(lshoulder>=60)flaglshoulder=0;
}
else
{
lshoulder-=5;
if(lshoulder<=-60)flaglshoulder=1;
}
glutPostRedisplay();
break;
case ‘5‘:
if(flagrshoulder)
{
rshoulder+=5;
if(rshoulder>=60)flagrshoulder=0;
}
else
{
rshoulder-=5;
if(rshoulder<=-60)flagrshoulder=1;
}
glutPostRedisplay();
break;
case ‘6‘:
if(flaglelbow)
{
lelbow+=5;
if(lelbow>=60)flaglelbow=0;
}
else
{
lelbow-=5;
if(lelbow<=-60)flaglelbow=1;
}
glutPostRedisplay();
break;
case ‘7‘:
if(flagrelbow)
{
relbow+=5;
if(relbow>=60)flagrelbow=0;
}
else
{
relbow-=5;
if(relbow<=-60)flagrelbow=1;
}
glutPostRedisplay();
break;
case ‘8‘:
if(flaglhips)
{
lhips+=5;
if(lhips>=60)flaglhips=0;
}
else
{
lhips-=5;
if(lhips<=-60)flaglhips=1;
}
glutPostRedisplay();
break;
case ‘9‘:
if(flagrhips)
{
rhips+=5;
if(rhips>=60)flagrhips=0;
}
else
{
rhips-=5;
if(rhips<=-60)flagrhips=1;
}
glutPostRedisplay();
break;
case ‘a‘:
if(flaglfoot)
{
lfoot+=5;
if(lfoot>=60)flaglfoot=0;
}
else
{
lfoot-=5;
if(lfoot<=-60)flaglfoot=1;
}
glutPostRedisplay();
break;
case ‘b‘:
if(flagrfoot)
{
rfoot+=5;
if(rfoot>=60)flagrfoot=0;
}
else
{
rfoot-=5;
if(rfoot<=-60)flagrfoot=1;
}
glutPostRedisplay();
break;
default:
break;
}
}
int main(int argc,char** argv) {
printf("按键’1’,’2’为整体旋转\n");
printf("按键’3’为头部旋转\n");
printf("按键’4’,’5’,’6’,’7’为手臂旋转\n");
printf("按键’8’,’9’,’a’,’b’为腿部旋转\n");
glutinit(&argc,argv);
glutinitdisplayMode(gluT_DOUBLE|gluT_RED);
glutinitwindowSize(600,600);
glutinitwindowPosition(100,100);
glutCreateWindow(argv[0]);
init();
glutdisplayFunc(display);
glutReshapeFunc(reshape);
glutKeyboardFunc(keyboard);
glutMainLoop();
return 0;
}
图形展示:
http://www.cnblogs.com/tracylining/articles/3357417.html
再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!http://www.captainbed.net
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。