旋轉、連接
1. 先將上週程式碼簡化,畫一個方塊
#include <GL/glut.h>
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPushMatrix();
glutSolidCube(1);///畫個方塊
glPopMatrix();
glutSwapBuffers();
}
int main(int argc, char ** argv)
{
glutInit( &argc, argv );
glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("08160173張淳雅O.O");
glutDisplayFunc(display);
glutIdleFunc(display);///有空就重畫畫面
glutMainLoop();
}
2. 加入轉動角度
#include <GL/glut.h>
float angle=0;
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPushMatrix();
glRotatef(angle, 0, 0, 1);///對中心轉甕
glutSolidCube(1);
glPopMatrix();
glutSwapBuffers();
angle++;
}
int main(int argc, char ** argv)
{
glutInit( &argc, argv );
glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("08160173張淳雅O.O");
glutDisplayFunc(display);
glutIdleFunc(display);
glutMainLoop();
}
3. 調整大小顏色
#include <GL/glut.h>
float angle=0;
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPushMatrix();
glRotatef(angle, 0, 0, 1);
glScalef(0.5, 0.1, 0.1);///大小
glColor3f(0,0,1);///顏色
glutSolidCube(1);
glPopMatrix();
glutSwapBuffers();
angle++;
}
int main(int argc, char ** argv)
{
glutInit( &argc, argv );
glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("08160173張淳雅O.O");
glutDisplayFunc(display);
glutIdleFunc(display);
glutMainLoop();
}
3. 移動重心
#include <GL/glut.h>
float angle=0;
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPushMatrix();
glRotatef(angle, 0, 0, 1);
glTranslatef(0.25, 0, 0);///把關節移到中間
glScalef(0.5, 0.1, 0.1);
glColor3f(0,0,1);
glutSolidCube(1);
glPopMatrix();
glutSwapBuffers();
angle++;
}
int main(int argc, char ** argv)
{
glutInit( &argc, argv );
glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("08160173張淳雅O.O");
glutDisplayFunc(display);
glutIdleFunc(display);
glutMainLoop();
}
4. 旋轉的藍色手臂(?
#include <GL/glut.h>
float angle=0;
void hand()///藍色方塊
{
glPushMatrix();
glScalef(0.5, 0.1, 0.1);
glColor3f(0,0,1);
glutSolidCube(1);
glPopMatrix();
}
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glColor3f(1,1,1); glutSolidCube(1);///身體
glPushMatrix();
glTranslatef(0.5, 0.5, 0);///(3)中心移到右上角掛著
glRotatef(angle, 0, 0, 1);///(2)對中心轉動
glTranslatef(0.25, 0, 0);///(1)關節移到中間
hand();///藍色方塊
glPopMatrix();
glutSwapBuffers();
angle++;
}
int main(int argc, char ** argv)
{
glutInit( &argc, argv );
glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("08160173張淳雅O.O");
glutDisplayFunc(display);
glutIdleFunc(display);
glutMainLoop();
}
#include <GL/glut.h>
float angle=0;
void hand()///藍色方塊
{
glPushMatrix();
glScalef(0.5, 0.1, 0.1);
glColor3f(0,0,1);
glutSolidCube(1);
glPopMatrix();
}
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glColor3f(1,1,1); glutSolidCube(0.5);///縮小一點比較好看效果
glPushMatrix();///右半邊
glTranslatef(0.25, 0.25, 0);///因為白色方塊大小改變,位置也跟著改變
glRotatef(angle, 0, 0, 1);
glTranslatef(0.25, 0, 0);
hand();///藍色方塊1(連著白色方塊)
glPushMatrix();
glTranslatef(0.25, 0, 0);///(3)
glRotatef(angle, 0, 0, 1);///(2)
glTranslatef(0.25, 0, 0);///(1)
hand();///藍色方塊2(連著藍色方塊1)
glPopMatrix();
glPopMatrix();
glutSwapBuffers();
angle+=0.05;///轉動速度調整
}
int main(int argc, char ** argv)
{
glutInit( &argc, argv );
glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("08160173張淳雅O.O");
glutDisplayFunc(display);
glutIdleFunc(display);
glutMainLoop();
}
6. 做一個左邊的
#include <GL/glut.h>
float angle=0;
void hand()///藍色方塊
{
glPushMatrix();
glScalef(0.5, 0.1, 0.1);
glColor3f(0,0,1);
glutSolidCube(1);
glPopMatrix();
}
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glColor3f(1,1,1); glutSolidCube(0.5);
glPushMatrix();///右半邊
glTranslatef(0.25, 0.25, 0);
glRotatef(angle, 0, 0, 1);
glTranslatef(0.25, 0, 0);
hand();
glPushMatrix();
glTranslatef(0.25, 0, 0);
glRotatef(angle, 0, 0, 1);
glTranslatef(0.25, 0, 0);
hand();
glPopMatrix();
glPopMatrix();
glPushMatrix();///左半邊
glTranslatef(-0.25, 0.25, 0);
glRotatef(angle, 0, 0, 1);
glTranslatef(-0.25, 0, 0);
hand();
glPushMatrix();
glTranslatef(-0.25, 0, 0);
glRotatef(+-angle, 0, 0, 1);
glTranslatef(-0.25, 0, 0);
hand();
glPopMatrix();
glPopMatrix();
glutSwapBuffers();
angle+=0.05;
}
int main(int argc, char ** argv)
{
glutInit( &argc, argv );
glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("08160173張淳雅O.O");
glutDisplayFunc(display);
glutIdleFunc(display);
glutMainLoop();
}








沒有留言:
張貼留言