Week-06
來做一個會旋轉的茶壺
#include <GL/glut.h>
float angle = 0;
void display()
{
glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );///清理背景不清會有殘影
glutSolidSphere(0.05, 30, 30);///創一個glutSolidSphere來輔助
glPushMatrix();
glRotatef(angle, 0, 0, 1);/// step02,開始旋轉
glTranslatef(0.46, -0.05, 0);/// step1把茶壺移到中心點,可創一個glutSolidSphere來輔助
glutSolidTeapot(0.3);
glPopMatrix();
glutSwapBuffers();
angle++;///把角度++
}
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("GLUT Shapes");
glutDisplayFunc(display);
glutIdleFunc(display);///清畫面
glutMainLoop();
}
來做一個會勾在另一個茶壺嘴旋轉的茶壺
#include <GL/glut.h>
float angle = 0;
void display()
{
glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );///清理背景不清會有殘影
glutSolidSphere(0.05, 30, 30);
glutSolidTeapot(0.3);///step01,在上一個程式新增茶壺
glPushMatrix();
glTranslatef(0.49, 0.13, 0);///step02,把那個會旋轉的茶壺往茶壺嘴移動
glRotatef(angle, 0, 0, 1);
glTranslatef(0.46, -0.05, 0);///移到中心點
glutSolidTeapot(0.3);
glPopMatrix();
glutSwapBuffers();
angle++;///把角度++
}
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("GLUT Shapes");
glutDisplayFunc(display);
glutIdleFunc(display);///清畫面
glutMainLoop();
}
#include <GL/glut.h>
float angle = 0;
void display()
{
glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );///清理背景不清會有殘影
glutSolidSphere(0.05, 30, 30);
glutSolidTeapot(0.3);
glPushMatrix();
glPushMatrix();///第二個茶壺
glTranslatef(0.49, 0.13, 0);
glRotatef(angle, 0, 0, 1);
glTranslatef(0.46, -0.05, 0);
glutSolidTeapot(0.3);
glPushMatrix();///第三個茶壺
glTranslatef(0.49, 0.13, 0);
glRotatef(angle, 0, 0, 1);
glTranslatef(0.46, -0.05, 0);
glutSolidTeapot(0.3);
glPopMatrix();
glPopMatrix();
glutSwapBuffers();
angle++;///把角度++
}
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("GLUT Shapes");
glutDisplayFunc(display);
glutIdleFunc(display);///清畫面
glutMainLoop();
}
#include <GL/glut.h>
float angle = 0;
void drawHand()///創一個drawHand的函式
{
glPushMatrix();
glScaled(1, 0.3, 0.3);///調整其大小x不變,y、z縮小
glutSolidCube(0.5);
glPopMatrix();
}
void display()
{
glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );///清理背景不清會有殘影
glPushMatrix();///即便有函式還是要push,pop
glRotatef(angle, 0, 0, 1);///開始旋轉
glTranslatef(0.25, 0, 0);///應為Cube的x是0.5,所以往右移0.25到中心點,這樣就是從邊邊轉而不是中心那邊轉
drawHand();
glPopMatrix();
glutSwapBuffers();
angle++;///把角度++
}
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("GLUT Shapes");
glutDisplayFunc(display);
glutIdleFunc(display);///清畫面
glutMainLoop();
}
做手臂
#include <GL/glut.h>
float angle = 0;
void drawHand()
{
glPushMatrix();
glScaled(1, 0.3, 0.3);
glutSolidCube(0.5);
glPopMatrix();
}
void display()
{
glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
glPushMatrix();
///glRotatef(angle, 0, 0, 1);///先註解掉是為了要讓你觀察一開始的情況
///glTranslatef(0.25, 0, 0);///
drawHand();
glPushMatrix();///這邊是有再轉的
glRotatef(angle, 0, 0, 1);
glTranslatef(0.25, 0, 0);
drawHand();
glPopMatrix();
glPopMatrix();
glutSwapBuffers();
angle++;///把角度++
}
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("GLUT Shapes");
glutDisplayFunc(display);
glutIdleFunc(display);///清畫面
glutMainLoop();
}
把手臂跟手走掛上去
#include <GL/glut.h>
float angle = 0;
void drawHand()
{
glPushMatrix();
glScaled(1, 0.3, 0.3);
glutSolidCube(0.5);
glPopMatrix();
}
void display()
{
glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
glPushMatrix();///右上臂
glTranslatef(0.25, 0, 0);
glRotatef(angle, 0, 0, 1);
glTranslatef(0.25, 0, 0);
drawHand();
glPushMatrix();///右上走
glTranslatef(0.25, 0, 0);///掛上去
glRotatef(angle, 0, 0, 1);
glTranslatef(0.25, 0, 0);
drawHand();
glPopMatrix();
glPopMatrix();
glutSwapBuffers();
angle++;///把角度++
}
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("GLUT Shapes");
glutDisplayFunc(display);
glutIdleFunc(display);///清畫面
glutMainLoop();
}
把左邊手也做出來
#include <GL/glut.h>
float angle = 0;
void drawHand()
{
glPushMatrix();
glScaled(1, 0.3, 0.3);
glutSolidCube(0.5);
glPopMatrix();
}
void display()
{
glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
glPushMatrix();///右上臂
glTranslatef(0.25, 0, 0);
glRotatef(angle, 0, 0, 1);
glTranslatef(0.25, 0, 0);
drawHand();
glPushMatrix();///右上走
glTranslatef(0.25, 0, 0);///掛上去
glRotatef(angle, 0, 0, 1);
glTranslatef(0.25, 0, 0);
drawHand();
glPopMatrix();
glPopMatrix();
glPushMatrix();///左上臂,加上負號就可
glTranslatef(-0.25, 0, 0);
glRotatef(angle, 0, 0, 1);
glTranslatef(-0.25, 0, 0);
drawHand();
glPushMatrix();///左上走
glTranslatef(-0.25, 0, 0);///掛上去
glRotatef(angle, 0, 0, 1);
glTranslatef(-0.25, 0, 0);
drawHand();
glPopMatrix();
glPopMatrix();
glutSwapBuffers();
angle++;///把角度++
}
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("GLUT Shapes");
glutDisplayFunc(display);
glutIdleFunc(display);///清畫面
glutMainLoop();
}







沒有留言:
張貼留言