★keyboard,mouse 璇轉★
接續上週week05的程式碼,加入一些函式,讓他可以旋轉,再使用滑鼠或鍵盤控制
首先要先加入
float angle=0;//(角度)初始化
接下來讓我們看看控制函式
1.鍵盤控制
void keyboard(unsigned char key ,int x,int y){
angle++;
display();
}
2.滑鼠控制
void mouse(int button,int state,int x,int y)
{
angle++;
display();
}
在display函式中要加入
push跟pop函式
glPushMatrix();
glRotated(angle,0,0,1);//旋轉(角度,x,y,z)
glScaled(0.5,0.1,0.1);//大小(x,y,z)
glColor3f(0.3,0.3,1.0);//顏色(r,g,b)
glutSolidCube(1);//實心正方形
glPopMatrix();
還要在main函式中呼叫
1.呼叫鍵盤函式
glutKeyboardFunc(keyboard);
2.呼叫滑鼠函式
glutMouseFunc(mouse);
程式碼:
★閒置時自動旋轉★
基本上就是使用display和main函式
在display中的push,pop新增
glTranslated(-0.25,0,0);//位置
glRotated(angle++,0,0,1);//顯示時旋轉
在main中增加Idle函式
glutIdleFunc(display);//一直重複顯示
!製作手臂(1)!
首先先寫一個手臂(hand)函式
void hand()//用來畫手臂
{
glPushMatrix();
glScaled(0.5,0.1,0.1);
glutSolidCube(1);
glPopMatrix();
}
在display 中的glPushMatrix增加
glPushMatrix();
glTranslated(-0.25,0,0);//固定hand位置
glRotated(angle++,0,0,1);//旋轉
glTranslated(-0.25,0,0);//將璇轉軸固定
hand();//使用手臂
glPopMatrix();
hand();//使用手臂
!雙旋轉手臂(2)!
 |
| 大象鼻子~~ |
在display 中的glPushMatrix增加新的glPushMatrix畫更多手臂
glPushMatrix();
glTranslated(-0.25,0,0);//固定hand位置
glRotated(angle,0,0,1);//旋轉
glColor3f(0.2,0.3,1.0);
glTranslated(-0.25,0,0);//將璇轉軸固定
hand();
glPushMatrix();
glTranslated(-0.25,0,0);//固定hand位置
glRotated(angle,0,0,1);//旋轉
glColor3f(0.2,0.3,1.0);
glTranslated(-0.25,0,0);//將璇轉軸固定
hand();
glPopMatrix();
glPopMatrix();
hand();
glutSwapBuffers();
angle++;
}
✋雙手一起轉✋
第一個版本
第二個版本
基本上就是更改display 中的glPushMatrix裡面的角度讓手臂的轉動方向改變
沒有留言:
張貼留言