選轉的小藍關節!!!
#include <GL/glut.h> ///(0) 使用GLUT外掛 (忘了裝 GLUT)
float angle=0; ///TODO:
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);///清空
glPushMatrix();///TODO: 備份矩陣
///glRotatef(angle, 0, 0, 1);///TODO: 旋轉, 對Z軸轉
glRotatef(angle,0,0,1);對著中心轉動
glScalef(0.5,0.1,0.1);把它變成細長的形狀
glColor3f(0,0,1);把方塊上色變成藍色的
glutSolidCube(1);用出一個方塊
glPopMatrix(); ///TODO: 還原矩陣
glutSwapBuffers();///交換兩倍的buffers
angle++;
}
int main(int argc, char ** argv)
{
glutInit( &argc, argv ); ///(1) GLUT初始設定
glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);///(2)顯示模式
glutCreateWindow("08160011我是神奇的小葉同學");///(3)開窗
glutDisplayFunc(display);///(4)等一下要顯示的函式
glutIdleFunc(display );///TODO2: mouse motion在動哦!!!!
glutMainLoop();///(5)主要迴圈
}
但現在是以中心為主在轉動的,所以我們要改變我們的中心位置
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);///清空
glPushMatrix();///TODO: 備份矩陣
///glRotatef(angle, 0, 0, 1);///TODO: 旋轉, 對Z軸轉
glRotatef(angle,0,0,1);
glTranslatef(0.25,0,0);把關節移動到中心
glScalef(0.5,0.1,0.1);
glColor3f(0,0,1);
glutSolidCube(1);
glPopMatrix(); ///TODO: 還原矩陣
glutSwapBuffers();///交換兩倍的buffers
angle++;
}
要讓首首到右上方 肩膀的位置轉動
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();///TODO: 備份矩陣
///glRotatef(angle, 0, 0, 1);///TODO: 旋轉, 對Z軸轉
glTranslatef(0.5,0.5,0);整個一道右上角掛著
glRotatef(angle,0,0,1);
glTranslatef(0.25,0.1,0.1);
glScalef(0.5,0.1,0.1);
glColor3f(0,0,1);
glutSolidCube(1);
glPopMatrix(); ///TODO: 還原矩陣
glutSwapBuffers();///交換兩倍的buffers
angle++;
}
把身體的部分縮小,手的部分再多一節
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);///清空
glColor3f(1,1,1); glutSolidCube(0.5);把身體的部分縮小不然太大會看不到新用的手臂
glPushMatrix();///TODO: 備份矩陣
///glRotatef(angle, 0, 0, 1);///TODO: 旋轉, 對Z軸轉
glTranslatef(0.25,0.25,0);
glRotatef(angle,0,0,1);
glTranslatef(0.25,0.1,0.1);
hand();
glPushMatrix();
glTranslatef(0.25,0,0);整個移動到右上方掛著
glRotatef(angle,0,0,1);對中心轉動
glTranslatef(0.25,0,0);把關節移動到中心
hand();細長藍色的小手手
glPopMatrix();
glPopMatrix(); ///TODO: 還原矩陣
glutSwapBuffers();///交換兩倍的buffers
angle++;
}
現在要來做兩隻手臂喊小手手,把右手臂的程式複製然後把前面的部分加上負號
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);///清空
glColor3f(1,1,1); glutSolidCube(0.5);
glPushMatrix();///右半邊
///glRotatef(angle, 0, 0, 1);///TODO: 旋轉, 對Z軸轉
glTranslatef(0.25,0.25,0);
glRotatef(angle,0,0,1);
glTranslatef(0.25,0.1,0.1);
hand();
glPushMatrix();
glTranslatef(0.25,0,0);
glRotatef(angle,0,0,1);
glTranslatef(0.25,0,0);
hand();
glPopMatrix();
glPopMatrix();
左手的部分
glPushMatrix();///左半邊
///glRotatef(angle, 0, 0, 1);///TODO: 旋轉, 對Z軸轉
glTranslatef(-0.25,0.25,0);
glRotatef(-angle,0,0,1);
glTranslatef(-0.25,0.1,0.1);
hand();
glPushMatrix();
glTranslatef(-0.25,0,0);
glRotatef(-angle,0,0,1);
glTranslatef(-0.25,0,0);
hand();///下手臂/手
glPopMatrix();
glPopMatrix(); ///TODO: 還原矩陣
glutSwapBuffers();///交換兩倍的buffers
angle++;
}
沒有留言:
張貼留言