▲今日目標:做出會動的機器手臂▲
--------------------------------------茶壺加三顆球一起按A轉動--------------------------------------
#include <GL/glut.h>
float angleX=0;
void display()
{
glEnable(GL_DEPTH_TEST);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); //清除背景
glPushMatrix();
glRotatef(angleX, 0,1,0);
glutWireTeapot(0.3);
glTranslatef(0.4,0,0);
glutSolidSphere(0.2,30,30); //左邊球
glTranslatef(-0.8,0,0);
glutSolidSphere(0.2,30,30); //右邊球
glTranslatef(0.4,0.4,0);
glutSolidSphere(0.2,30,30); //上面球
glPopMatrix();
glutSwapBuffers();
}
void keyboard(unsigned char key, int x, int y)
{
if(key=='a') angleX+=3;
if(key=='b') angleX-=3;
glutPostRedisplay();
}
void myLight()
{
const GLfloat light_position[] = { 2.0f, 5.0f, -5.0f, 0.0f };
glEnable(GL_LIGHT0);
glEnable(GL_NORMALIZE);
glEnable(GL_COLOR_MATERIAL);
glEnable(GL_LIGHTING);
glLightfv(GL_LIGHT0, GL_POSITION, light_position);
}
int main()
{
glutInitDisplayMode(GLUT_DOUBLE |GLUT_DEPTH);
glutCreateWindow("week11");
glutDisplayFunc(display);
glutKeyboardFunc(keyboard);
myLight();
glutMainLoop();
}
-----------------------------改程式碼 雖然比較純樸但是比較容易了解-----------------------------
#include <GL/glut.h>
float angleX=0;
void display()
{
glEnable(GL_DEPTH_TEST);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPushMatrix();
glRotatef(angleX, 0,1,0);
glutWireTeapot(0.3);
glPushMatrix();
glTranslatef(0.4,0,0);
glutSolidSphere(0.2,30,30); //左邊球
glPopMatrix();
glPushMatrix();
glTranslatef(-0.4,0,0);
glutSolidSphere(0.2,30,30); //右邊球
glPopMatrix();
glPushMatrix();
glTranslatef(0,0.4,0);
glutSolidSphere(0.2,30,30); //上面球
glPopMatrix();
glPopMatrix();
glutSwapBuffers();
}
void keyboard(unsigned char key, int x, int y)
{
if(key=='a') angleX+=3;
if(key=='b') angleX-=3;
glutPostRedisplay();
}
void myLight()
{
const GLfloat light_position[] = { 2.0f, 5.0f, -5.0f, 0.0f };
glEnable(GL_LIGHT0);
glEnable(GL_NORMALIZE);
glEnable(GL_COLOR_MATERIAL);
glEnable(GL_LIGHTING);
glLightfv(GL_LIGHT0, GL_POSITION, light_position);
}
int main()
{
glutInitDisplayMode(GLUT_DOUBLE |GLUT_DEPTH);
glutCreateWindow("week11");
glutDisplayFunc(display);
glutKeyboardFunc(keyboard);
myLight();
glutMainLoop();
}
-----------------------------任務: 左右各畫個長方塊,像手臂一樣------------------------------
#include <GL/glut.h>
float angleX=0;
void display()
{
glEnable(GL_DEPTH_TEST);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPushMatrix();
glRotatef(angleX, 0,1,0);
glutWireTeapot(0.3);
glPushMatrix();
glTranslatef(0.4,0,0);
glutSolidSphere(0.2,30,30); //左邊球
glPopMatrix();
glPushMatrix();
glTranslatef(-0.4,0,0);
glutSolidSphere(0.2,30,30); //右邊球
glPopMatrix();
glPushMatrix();
glTranslatef(0,0.4,0);
glutSolidSphere(0.2,30,30); //上面球
glPopMatrix();
glPushMatrix();
glTranslatef(0.6,0,0);
glRotatef(90,0,0,1);
glScalef(1,1.5,0.4);
glutSolidCube(0.3);
glPopMatrix();
glPushMatrix();
glTranslatef(-0.6,0,0);
glRotatef(90,0,0,1);
glScalef(1,1.5,0.4);
glutSolidCube(0.3);
glPopMatrix();
glPopMatrix();
glutSwapBuffers();
}
void keyboard(unsigned char key, int x, int y)
{
if(key=='a') angleX+=3;
if(key=='b') angleX-=3;
glutPostRedisplay();
}
void myLight()
{
const GLfloat light_position[] = { 2.0f, 5.0f, -5.0f, 0.0f };
glEnable(GL_LIGHT0);
glEnable(GL_NORMALIZE);
glEnable(GL_COLOR_MATERIAL);
glEnable(GL_LIGHTING);
glLightfv(GL_LIGHT0, GL_POSITION, light_position);
}
int main()
{
glutInitDisplayMode(GLUT_DOUBLE |GLUT_DEPTH);
glutCreateWindow("week11");
glutDisplayFunc(display);
glutKeyboardFunc(keyboard);
myLight();
glutMainLoop();
}
-----------------------------------------機器人的手繞著球旋轉----------------------------------------
#include <GL/glut.h>
float angleX=0, angle1=0;
void display()
{
glEnable(GL_DEPTH_TEST);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPushMatrix();
glRotatef(angleX, 0,1,0);
glutWireTeapot(0.3); //茶壺
glPushMatrix();
glTranslatef(0.4,0,0);
glutSolidSphere(0.2,30,30); //左邊球
glPushMatrix();
glRotatef(angle1,0,0,1);
glTranslatef(0.3,0,0);
glScalef(2,1,1);
glutSolidCube(0.2);
glPopMatrix();
glPopMatrix();
glPushMatrix();
glTranslatef(-0.4,0,0);
glutSolidSphere(0.2,30,30); //右邊球
glPushMatrix();
glRotatef(angle1,0,0,1);
glTranslatef(-0.3,0,0);
glScalef(2,1,1);
glutSolidCube(0.2);
glPopMatrix();
glPopMatrix();
glPushMatrix();
glTranslatef(0,0.4,0);
glutSolidSphere(0.2,30,30); //上面球
glPopMatrix();
glPopMatrix();
glutSwapBuffers();
}
void keyboard(unsigned char key, int x, int y)
{
if(key=='a') angleX+=3;
if(key=='b') angleX-=3;
if(key=='1') angle1+=3;
if(key=='2') angle1-=3;
glutPostRedisplay();
}
void myLight()
{
const GLfloat light_position[] = { 2.0f, 5.0f, -5.0f, 0.0f };
glEnable(GL_LIGHT0);
glEnable(GL_NORMALIZE);
glEnable(GL_COLOR_MATERIAL);
glEnable(GL_LIGHTING);
glLightfv(GL_LIGHT0, GL_POSITION, light_position);
}
int main()
{
glutInitDisplayMode(GLUT_DOUBLE |GLUT_DEPTH);
glutCreateWindow("week11");
glutDisplayFunc(display);
glutKeyboardFunc(keyboard);
myLight();
glutMainLoop();
}
xxxxxxxxxxxxxxxxxxxx錯誤低xxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-----------------------------畫出大腿跟小腿(重點:繞著旋轉的重心)-----------------------------
#include <GL/glut.h>
float angleX=0, angle1=0;
void display()
{
glEnable(GL_DEPTH_TEST);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPushMatrix();
glRotatef(angleX, 0,1,0);
glutWireTeapot(0.3); //茶壺
glPushMatrix();
glTranslatef(0.4,0,0);
glutSolidSphere(0.2,30,30); //左邊球
glPushMatrix();
glRotatef(angle1,0,0,1);
glTranslatef(0.3,0,0);
glScalef(2,1,1);
glutSolidCube(0.2);
glPopMatrix();
glPopMatrix();
glPushMatrix();
glTranslatef(-0.4,0,0);
glutSolidSphere(0.2,30,30); //右邊球
glPushMatrix();
glRotatef(angle1,0,0,1);
glTranslatef(-0.3,0,0);
glScalef(2,1,1);
glutSolidCube(0.2);
glPopMatrix();
glPopMatrix();
glPushMatrix(); //右腳
glTranslatef(0.2,-0.2,0); //T: (3)讓會轉的腳,掛在該掛的位置
glRotatef(angle1,0,0,1); //R: (2)照著中心轉動
glTranslatef(0,-0.36/2,0);//T: (1)讓旋轉軸移到中心
glPushMatrix(); //因為有個Scale,要把它限制擋起來,不要影響到小腿
glScalef(0.2,0.36,0.2);
glutSolidCube(1);
glPopMatrix(); //這是大腿
glPushMatrix(); //右小腿,掛在右腳膝蓋的地方
glTranslatef(0,-0.18,0); //T: (3)讓會轉的腳,掛在該掛的位置
glRotatef(angle1,0,0,1); //R: (2)照著中心轉動
glTranslatef(0,-0.36/2,0);//T: (1)讓旋轉軸移到中心
glScalef(0.2,0.36,0.2);
glutSolidCube(1);
glPopMatrix();
glPopMatrix();
glPushMatrix(); //左腳
glTranslatef(-0.2,-0.2,0); //T: (3)讓會轉的腳,掛在該掛的位置
glRotatef(angle1,0,0,1); //R: (2)照著中心轉動
glTranslatef(0,-0.36/2,0); //T: (1)讓旋轉軸移到中心
glPushMatrix(); //因為有個Scale,要把它限制擋起來,不要影響到小腿
glScalef(0.2,0.36,0.2);
glutSolidCube(1);
glPopMatrix(); //這是大腿
glPushMatrix(); //左小腿,掛在左腳膝蓋的地方
glTranslatef(0,-0.18,0); //T: (3)讓會轉的腳,掛在該掛的位置
glRotatef(angle1,0,0,1); //R: (2)照著中心轉動
glTranslatef(0,-0.36/2,0);//T: (1)讓旋轉軸移到中心
glScalef(0.2,0.36,0.2);
glutSolidCube(1);
glPopMatrix();
glPopMatrix();
glPushMatrix();
glTranslatef(0,0.4,0);
glutSolidSphere(0.2,30,30); //上面球
glPopMatrix();
glPopMatrix();
glutSwapBuffers();
}
void keyboard(unsigned char key, int x, int y)
{
if(key=='a') angleX+=3;
if(key=='b') angleX-=3;
if(key=='1') angle1+=3;
if(key=='2') angle1-=3;
glutPostRedisplay();
}
void myLight()
{
const GLfloat light_position[] = { 2.0f, 5.0f, -5.0f, 0.0f };
glEnable(GL_LIGHT0);
glEnable(GL_NORMALIZE);
glEnable(GL_COLOR_MATERIAL);
glEnable(GL_LIGHTING);
glLightfv(GL_LIGHT0, GL_POSITION, light_position);
}
int main()
{
glutInitDisplayMode(GLUT_DOUBLE |GLUT_DEPTH);
glutCreateWindow("week11");
glutDisplayFunc(display);
glutKeyboardFunc(keyboard);
myLight();
glutMainLoop();
}






沒有留言:
張貼留言