2024年5月23日 星期四

電腦圖學14

 ##week14-1_alpha_interpolation_angle_timer

先設定好環境

0. freeglut 安裝(拉到桌面),再把 lib的 libfreeglut.a 複製成 libglut32.a

1.安裝OpenCV

2.重開CodeBlocks,Setting-Compiler 要改3個地方

(1)C:\OpenCV2.1\include


(2)C:\OpenCV2.1\lib


(3)cv210 cxcore210 highgui210


接下來再把 GitHub的程式倉庫下載下來,

接續上周的week13-2_FILE_fopen_fprintf_fscanf 拿來改

0.更改目錄名、.cbp檔檔名、Title

(1)week12-3複製目錄,改目錄名為:week14-1_alpha_interpolation_angle_timer

(2)把.cbp檔,改檔名為week14-1_alpha_interpolation_angle_timer

(3)用Notepad++開.cbp檔,改Title

week14-1_alpha_interpolation_angle_timer,並把對應目錄改好

(4)CodeBlocks File-Open :week14-1_alpha_interpolation_angle_timer


第175行可以改善貼圖上不去的問題

glDisable(GL_TEXTURE_2D);






TODO:開啟Ecxel

alpha 公式

```

新的*alpha +舊的*(1-alpha)

```



更改程式:

把原來motion()裡存檔的程式碼,剪下來,貼到keyboard()



測試用程式:

```cpp

void timer(int t){///實驗用的程式碼註解

    glutTimerFunc(1000,timer,t+1);

    printf("現在起床:%d\n",t);

}

```
int main(int argc, char*argv[])
{
```
    glutTimerFunc(0,timer,0);





增加程式:移動並按s存檔,關閉小視窗後重啟按p便會移動

```cpp

float oldAngle[20]={},newAngle[20]={};
void timer(int t){
    glutTimerFunc(50,timer,t+1);
    if(t%20==0){
        if(fin==NULL)   fin=fopen("angle.txt","r");
        for(int i=0;i<20;i++){///針對20個關節
            oldAngle[i]=newAngle[i];
            fscanf(fin,"%f",&newAngle[i]);
        }
    }
    float alpha=(t%20)/20.0;
    for(int i=0;i<20;i++){///針對20個關節
        angle[i]=newAngle[i]*alpha+oldAngle[i]*(1-alpha);
    }
    glutPostRedisplay();
}

void keyboard(unsigned char key ,int x,int y){
    if(key=='p'){///Play播放
        glutTimerFunc(0,timer,0);
    }
    if(key=='r'){
        if(fout==NULL)    fout=fopen("angle.txt","r");
        for(int i=0;i<20;i++){
        fscanf(fin,"%f",angle[i]);
        }
    glutPostRedisplay();
    }
```

 ##week14-2_angleX_angleY_10

1.複製今天的week14-1變成今天的專案

2.更改目錄名、.cbp檔檔名、Title

程式修改如下:

1.if(key=='0') angleID = 0; 做到 if(key=='9*') angleID = 9;

2.把float angle[20]={}; 改成 float angleX[10]={}, angleY[10]={}

3.把原本的for(int i=0;i<20;i++)變成 for(int i=0;i<10;i++)


```cpp

for(int i=0;i<10;i++){

    //printf("%.1f ", angle[i]);

    printf("%.1f ", angleX[i]);

    printf("%.1f ", angleY[i]);

    //fprintf(fout, "%.1f ", angle[i]);

    fprintf(fout, "%.1f ", angleX[i]);

    fprintf(fout, "%.1f ", angleY[i]);

}


再把讀檔的地方,也改掉,也打timer()裡也改掉

4.display()裡,把T-R-T改一下



 

沒有留言:

張貼留言