Week06-1
先開啟codeblock,開啟一個glut的project
複製上週旋轉茶壺的程式碼並修改
#include <GL/glut.h>
float angle = 0;
void display()
{
glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT ); ///清背景
glutSolidSphere(0.02,30,30);
glPushMatrix();
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("week04");
glutDisplayFunc(display);
glutIdleFunc(display); ///有空idle時,就重畫畫面
glutMainLoop();
}
他會以中心點來旋轉
得到以茶壺口旋轉的茶
#include <GL/glut.h>
float angle = 0; ///宣告global全域變數angle
void display()
{
glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT ); ///清背景
glutSolidSphere(0.02,30,30);
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();
glutSwapBuffers();
angle++;
}
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("week04");
glutDisplayFunc(display);
glutIdleFunc(display); ///有空idle時,就重畫畫面
glutMainLoop();
}
接著用出三個茶杯轉
#include <GL/glut.h>
float angle=0;
void display()
{
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glutSolidTeapot(0.3);
glPushMatrix();///右手臂
glTranslatef(0.50,0.13,0);
glRotatef(angle,0,0,1);
glTranslatef(0.46,-0.05,0);
glutSolidTeapot(0.3);
glPushMatrix();///右手肘
glTranslatef(0.50,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("week06");
glutDisplayFunc(display);
glutIdleFunc(display);
glutMainLoop();
}
#include <GL/glut.h>
float angle=0;
void drawHand()
{
glPushMatrix();
glScalef(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();
glPopMatrix();
glutSwapBuffers();
angle++;
}
int main(int argc,char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("week05");
glutDisplayFunc(display);
glutIdleFunc(display);
glutMainLoop();
}
做出轉動手臂且相連的兩個手臂
#include <GL/glut.h>float angle=0;void drawHand(){glPushMatrix();glScalef(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("week05");glutDisplayFunc(display);glutIdleFunc(display);glutMainLoop();}
d





沒有留言:
張貼留言