2017年5月23日 星期二

第十四周電腦圖學筆記

(一) 上周作業
(二)讓機器人動
(三)Timer計時器
(四)鍵盤滑鼠控制
(五)機器人2.0

TODO:用同學範例
(1).cbp檔用notepad++開啟,include目錄,lib目錄設對
working目錄設"."
(2) Build &Run

Timer計時器:
#include <stdio.h>
void timer(int t)
{
    printf("現在我起床了, t是%d...", t);
    glutTimerFunc(100, timer, t+1);
    printf("我撥了一個新的timer....");
    angle+=3;
    glutPostRedisplay();
    printf("記得重畫畫面哦! 我睡了, bye\n");
}

int main(int argc, char**argv)裡面+
glutTimerFunc(2000,timer,0);
2000=秒數,timer呼叫函式,0=參數
旋轉手臂
先把手臂位子放到函式裡
void drawArm0()
{
....;
}
在召喚左手臂回來
        glPushMatrix();
            //drawBody();
            //glutSolidTeapot(0.03);
            glPushMatrix();///Left Part
                glTranslatef(-0.22, +0.35, 0);///(3) 最後,把它掛在對的位置
                glRotatef(-angle, 0,0,1); ///(1) 先轉動
                glTranslatef(0.22, -0.35, 0);///(2) move the rotate center to center
                drawArm0();//先搞定上手臂在搞定下手臂

                glTranslatef(-0.48, +0.1, 0);///(3)  最後,把它掛在對的位置
                glRotatef(-angle, 0,0,1);///(1) 先轉動
                glTranslatef(0.48, -0.1, 0);///(2) 接著將旋轉中心,放到真的中心, 記得把樓上先註解掉
                drawArm1();
            glPopMatrix();
        glPopMatrix();
右手臂:
用滑鼠拖曳(用滑鼠轉角度)

用鍵盤+滑鼠控制各部位
float angle[8] = {} ;///全家都是零(看幾個關節)
int now=0;
int oldX=0, oldY=0;
void keyboard(unsigned char key, int x, int y)
{
    if(key=='0')now=0;
    if(key=='1')now=1;
    if(key=='2')now=2;
    if(key=='3')now=3;
    if(key=='4')now=4;
}
void mouse(int button, int state, int x, int y)
{
    oldX=x; oldY=y;
    glutPostRedisplay();
}
void motion(int x, int y)
{
    angle[now] += (x-oldX);
    oldX=x;
    glutPostRedisplay();
}

int main裡面
  glutKeyboardFunc(keyboard);

沒有留言:

張貼留言