1. 程式人生 > >OpenGL 基於OpenGL的三維機器人仿真

OpenGL 基於OpenGL的三維機器人仿真

std ble scale mage num ima pre ali lena

分享一下我老師大神的人工智能教程吧。零基礎!通俗易懂!風趣幽默!還帶黃段子!希望你也加入到我們人工智能的隊伍中來!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, 0.0, 1.0 };
GLfloat mat_ambient[]		= { 0.8
, 0.8, 0.8, 1.0 }; GLfloat mat_ambient_color[] = { 0.8, 0.8, 0.2, 1.0 }; GLfloat mat_diffuse[] = { 0.5, 0.8, 0.0, 1.0 }; GLfloat mat_specular[] = { 1.0, 0.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.2, 0.2
, 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
, 0.0, 0.0, 1.0 }; GLfloat diffuse[] = { 1.0, 1.0, 1.0, 1.0 }; GLfloat position[] = { 0.0, 5.0, 10.0, 0.0 }; GLfloat lmodel_ambient[] = { 0.4, 0.4, 0.4, 1.0 }; GLfloat local_view[] = { 0.0 }; glClearColor(0,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, GL_AMBIENT, mat_ambient_color); glMaterialfv(GL_FRONT, GL_DIFFUSE, 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, GL_AMBIENT, no_mat); glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse); glMaterialfv(GL_FRONT, GL_SPECULAR, no_mat); glMaterialfv(GL_FRONT, GL_SHININESS, no_shininess); glMaterialfv(GL_FRONT, GL_EMISSION, no_mat); glTranslatef(1.5, 3,0); glRotatef(lshoulder, 1, 0, 0); glTranslatef(0, -0.5, 0); glScalef(0.4, 1, 0.5); glutSolidCube(2); glScalef(1 / 0.4, 1 / 1, 1 / 0.5); glTranslatef(0, -1.4, 0); glRotatef(lelbow, 1,0, 0); glutWireSphere(0.4, 200, 500); glScalef(0.4, 1, 0.5); glTranslatef(0, -1.4, 0); glutSolidCube(2); glPopMatrix(); } void draw_rightshoulder(void) { glPushMatrix(); glMaterialfv(GL_FRONT, GL_AMBIENT, no_mat); glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse); glMaterialfv(GL_FRONT, GL_SPECULAR, no_mat); glMaterialfv(GL_FRONT, GL_SHININESS, no_shininess); glMaterialfv(GL_FRONT, GL_EMISSION, no_mat); glTranslatef(-1.5,3,0); glRotatef(rshoulder,1,0,0); glTranslatef(0,-0.5,0); glScalef(0.4,1,0.5); glutSolidCube(2); glScalef(1/0.4,1/1,1/0.5); glTranslatef(0,-1.4,0); glRotatef(relbow,1,0,0); glutWireSphere(0.4,200,500); glScalef(0.4,1,0.5); glTranslatef(0,-1.4,0); glutSolidCube(2); glPopMatrix(); } void draw_head(void) { glPushMatrix(); glMaterialfv(GL_FRONT, GL_AMBIENT, no_mat); glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse); glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular); glMaterialfv(GL_FRONT, GL_SHININESS, low_shininess); glMaterialfv(GL_FRONT, GL_EMISSION, no_mat); glTranslatef(0,3.5,0); glRotatef(neck,0,0,1); glTranslatef(0,1,0); glutWireSphere(1,200,500); glPopMatrix(); } void draw_leftfoot(void) { glPushMatrix(); glMaterialfv(GL_FRONT, GL_AMBIENT, no_mat); glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse); glMaterialfv(GL_FRONT, GL_SPECULAR, no_mat); glMaterialfv(GL_FRONT, GL_SHININESS, no_shininess); glMaterialfv(GL_FRONT, GL_EMISSION, no_mat); glTranslatef(-0.6,-0.6,0); glRotatef(lfoot,1,0,0); glTranslatef(0,-1,0); glScalef(0.4,1,0.5); glutSolidCube(2); glScalef(1/0.4,1/1,1/0.5); glTranslatef(0,-1.4,0); glRotatef(lhips,1,0,0); glutWireSphere(0.4,200,500); glScalef(0.4,1,0.5); glTranslatef(0,-1.4,0); glutSolidCube(2); glPopMatrix(); } void draw_rightfoot(void) { glPushMatrix(); glMaterialfv(GL_FRONT, GL_AMBIENT, no_mat); glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse); glMaterialfv(GL_FRONT, GL_SPECULAR, no_mat); glMaterialfv(GL_FRONT, GL_SHININESS, no_shininess); glMaterialfv(GL_FRONT, GL_EMISSION, no_mat); glTranslatef(0.6,-0.6,0); glRotatef(rfoot,1,0,0); glTranslatef(0,-1,0); glScalef(0.4,1,0.5); glutSolidCube(2); glScalef(1/0.4,1/1,1/0.5); glTranslatef(0,-1.4,0); glRotatef(rhips,1,0,0); glutWireSphere(0.4,200,500); glScalef(0.4,1,0.5); glTranslatef(0,-1.4,0); glutSolidCube(2); glPopMatrix(); } void display(void) { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glPushMatrix(); glRotatef(angle,0,1,0); glTranslatef(0,4,0); draw_body(); draw_head(); draw_leftshoulder(); draw_rightshoulder(); draw_leftfoot(); draw_rightfoot(); glPopMatrix(); glutSwapBuffers(); } void reshape(int w,int h) { glViewport(0,0,w,h); glMatrixMode(GL_PROJECTION); glLoadIdentity(); glOrtho(-8,8,-8,8,-10,10); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); gluLookAt (0.0, 4.0, 10, 0.0, 4, 0.0, 0.0, 1.0, 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

OpenGL 基於OpenGL的三維機器人仿真