今天要教的是"動作儲存" (゚∀。)
首先先開啟CodeBlocks 開一個新的檔案(非project)
***檔名記得存成 .cpp ***
按齒輪會跑出以下的檔案(.o & .exe)
按下齒輪+執行會有新的檔案出來
稍微改一下程式碼,讓他跑個迴圈
因為write不同,又多了一個.txt檔
因為write不同,又多了一個.txt檔
等等要開始加上動作了 d(`・∀・)b
-----------------------------------------------------------------
第二節課
先開啟一個新的專案 glut project
然後因為程式碼實在太多行了
小葉老師很貼心地送給我們程式碼 ヽ(✿゚▽゚)ノ
▼▼▼▼▼▼▼▼以下祭品▼▼▼▼▼▼▼▼▼
#include <GL/glut.h>
int angle[10]={0,0,0,0,0, 0,0,0,0,0};
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glColor3f(1,1,1);///白色
glutSolidTeapot(0.2);///身體
glPushMatrix();///右側
glTranslatef(0.2, 0,0 );
glRotatef(angle[0], 0,0,1);
glTranslatef(0.2, 0,0 );
glColor3f(1,0,0);///紅色
glutSolidTeapot(0.2);///右上手臂
glPushMatrix();
glTranslatef(0.2, 0,0);
glRotatef(angle[1], 0,0,1);
glTranslatef(0.2, 0,0);
glColor3f(1,1,0);///黃色
glutSolidTeapot(0.2);///右下手臂
glPopMatrix();
glPopMatrix();///右側
glPushMatrix();///左側
glTranslatef(-0.2, 0,0 );
glRotatef(angle[2], 0,0,1);
glTranslatef(-0.2, 0,0 );
glColor3f(0,1,0);///綠色
glutSolidTeapot(0.2);///左上手臂
glPushMatrix();
glTranslatef(-0.2, 0,0);
glRotatef(angle[3], 0,0,1);
glTranslatef(-0.2, 0,0);
glColor3f(0,0,1);///藍色
glutSolidTeapot(0.2);///左下手臂
glPopMatrix();
glPopMatrix();///右側
glutSwapBuffers();
}
int main(int argc, char**argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("Week14 file");
glutDisplayFunc(display);
glutMainLoop();
}
▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲
再來要向上禮拜一樣
使用鍵盤滑鼠控制其轉動角度

偷偷用一下小葉老師的截圖 (✪ω✪)
因為老師說截的很漂亮
剛好TODO2全部都在這裡面
▼▼▼▼▼▼▼▼以下祭品▼▼▼▼▼▼▼▼▼
#include <GL/glut.h>
int angle[10]={0,0,0,0,0, 0,0,0,0,0};
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glColor3f(1,1,1);///白色
glutSolidTeapot(0.2);///身體
glPushMatrix();///右側
glTranslatef(0.2, 0,0 );
glRotatef(angle[0], 0,0,1);
glTranslatef(0.2, 0,0 );
glColor3f(1,0,0);///紅色
glutSolidTeapot(0.2);///右上手臂
glPushMatrix();
glTranslatef(0.2, 0,0);
glRotatef(angle[1], 0,0,1);
glTranslatef(0.2, 0,0);
glColor3f(1,1,0);///黃色
glutSolidTeapot(0.2);///右下手臂
glPopMatrix();
glPopMatrix();///右側
glPushMatrix();///左側
glTranslatef(-0.2, 0,0 );
glRotatef(angle[2], 0,0,1);
glTranslatef(-0.2, 0,0 );
glColor3f(0,1,0);///綠色
glutSolidTeapot(0.2);///左上手臂
glPushMatrix();
glTranslatef(-0.2, 0,0);
glRotatef(angle[3], 0,0,1);
glTranslatef(-0.2, 0,0);
glColor3f(0,0,1);///藍色
glutSolidTeapot(0.2);///左下手臂
glPopMatrix();
glPopMatrix();///右側
glutSwapBuffers();
}
int angleID=0;///0,1,2,3
int oldX, oldY;
void mouse(int button, int state, int x, int y)
{///TODO2:備份(old)mouse位置
oldX=x; oldY=y;///TODO2:備份(old)mouse位置
}
void motion(int x, int y)
{///TODO2:滑動,更新 angleID對應的angle[]
angle[angleID] += (x-oldX);
oldX=x;
glutPostRedisplay();///TODO2:重畫畫面
}
void keyboard(unsigned char key, int x, int y)
{///TODO2: 鍵盤,選angleID
if(key=='0') angleID=0;
if(key=='1') angleID=1;
if(key=='2') angleID=2;
if(key=='3') angleID=3;
}
int main(int argc, char**argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("Week14 file");
glutDisplayFunc(display);
glutMouseFunc(mouse);///TODO2:備份(old)mouse位置
glutMotionFunc(motion);///TODO2:滑動,更新 angleID對應的angle[]
glutKeyboardFunc(keyboard);///TODO2: 鍵盤,選angleID
glutMainLoop();
}
▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲
第三節課
現在可以直接看到旋轉角度的變化了 (๑´ڡ`๑)
剛剛還有順便把這些訊息存起來唷

***老師及其推薦的一個"比較"外掛***

WOW真的好方便喔
可以直接看到兩個資料的對比

***老師上課辛苦了,聽到是台灣人做的,我肯定支持***
記錄完上一次的檔案之後
再加上這幾行程式碼
就可以重播之前的動作了 ─=≡Σ((( つ•̀ω•́)つ

▼▼▼▼▼▼▼▼以下祭品▼▼▼▼▼▼▼▼▼
FILE * fin=NULL;
void keyboard(unsigned char key, int x, int y)
{///TODO2: 鍵盤,選angleID
if(key=='0') angleID=0;
if(key=='1') angleID=1;
if(key=='2') angleID=2;
if(key=='3') angleID=3;
if(key=='r')///要按住R喔
{
if(fin==NULL) fin=fopen("motion.txt", "r");///TODO4:開檔
for(int i=0; i<10; i++)
{
///scanf("%d", &angle[i]);
fscanf(fin,"%d", &angle[i]);///TODO4:讀檔
}
glutPostRedisplay();///TODO4:重畫
}
}
▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲
同樣的執行結果
但是下面的有整理過了
看起來比較乾淨整齊 。:.゚ヽ(*´∀`)ノ゚.:。
*** 只適用於 C/C++ ***
▼▼▼▼▼▼▼▼以下祭品▼▼▼▼▼▼▼▼▼
#include <GL/glut.h>
int angle[10]={0,0,0,0,0, 0,0,0,0,0};
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glColor3f(1,1,1);///白色
glutSolidTeapot(0.2);///身體
glPushMatrix();///右側
glTranslatef(0.2, 0,0 );
glRotatef(angle[0], 0,0,1);
glTranslatef(0.2, 0,0 );
glColor3f(1,0,0);///紅色
glutSolidTeapot(0.2);///右上手臂
glPushMatrix();
glTranslatef(0.2, 0,0);
glRotatef(angle[1], 0,0,1);
glTranslatef(0.2, 0,0);
glColor3f(1,1,0);///黃色
glutSolidTeapot(0.2);///右下手臂
glPopMatrix();
glPopMatrix();///右側
glPushMatrix();///左側
glTranslatef(-0.2, 0,0 );
glRotatef(angle[2], 0,0,1);
glTranslatef(-0.2, 0,0 );
glColor3f(0,1,0);///綠色
glutSolidTeapot(0.2);///左上手臂
glPushMatrix();
glTranslatef(-0.2, 0,0);
glRotatef(angle[3], 0,0,1);
glTranslatef(-0.2, 0,0);
glColor3f(0,0,1);///藍色
glutSolidTeapot(0.2);///左下手臂
glPopMatrix();
glPopMatrix();///右側
glutSwapBuffers();
}
int main(int argc, char**argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("Week14 file");
glutDisplayFunc(display);
glutMainLoop();
}
第三節課
現在可以直接看到旋轉角度的變化了 (๑´ڡ`๑)
剛剛還有順便把這些訊息存起來唷
***老師及其推薦的一個"比較"外掛***
WOW真的好方便喔
可以直接看到兩個資料的對比
***老師上課辛苦了,聽到是台灣人做的,我肯定支持***
記錄完上一次的檔案之後
再加上這幾行程式碼
就可以重播之前的動作了 ─=≡Σ((( つ•̀ω•́)つ
▼▼▼▼▼▼▼▼以下祭品▼▼▼▼▼▼▼▼▼
FILE * fin=NULL;
void keyboard(unsigned char key, int x, int y)
{///TODO2: 鍵盤,選angleID
if(key=='0') angleID=0;
if(key=='1') angleID=1;
if(key=='2') angleID=2;
if(key=='3') angleID=3;
if(key=='r')///要按住R喔
{
if(fin==NULL) fin=fopen("motion.txt", "r");///TODO4:開檔
for(int i=0; i<10; i++)
{
///scanf("%d", &angle[i]);
fscanf(fin,"%d", &angle[i]);///TODO4:讀檔
}
glutPostRedisplay();///TODO4:重畫
}
}
▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲
同樣的執行結果
但是下面的有整理過了
看起來比較乾淨整齊 。:.゚ヽ(*´∀`)ノ゚.:。
*** 只適用於 C/C++ ***
▼▼▼▼▼▼▼▼以下祭品▼▼▼▼▼▼▼▼▼
#include <GL/glut.h>
int angle[10]={0,0,0,0,0, 0,0,0,0,0};
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glColor3f(1,1,1);///白色
glutSolidTeapot(0.2);///身體
glPushMatrix();///右側
glTranslatef(0.2, 0,0 );
glRotatef(angle[0], 0,0,1);
glTranslatef(0.2, 0,0 );
glColor3f(1,0,0);///紅色
glutSolidTeapot(0.2);///右上手臂
glPushMatrix();
glTranslatef(0.2, 0,0);
glRotatef(angle[1], 0,0,1);
glTranslatef(0.2, 0,0);
glColor3f(1,1,0);///黃色
glutSolidTeapot(0.2);///右下手臂
glPopMatrix();
glPopMatrix();///右側
glPushMatrix();///左側
glTranslatef(-0.2, 0,0 );
glRotatef(angle[2], 0,0,1);
glTranslatef(-0.2, 0,0 );
glColor3f(0,1,0);///綠色
glutSolidTeapot(0.2);///左上手臂
glPushMatrix();
glTranslatef(-0.2, 0,0);
glRotatef(angle[3], 0,0,1);
glTranslatef(-0.2, 0,0);
glColor3f(0,0,1);///藍色
glutSolidTeapot(0.2);///左下手臂
glPopMatrix();
glPopMatrix();///右側
glutSwapBuffers();
}
int main(int argc, char**argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("Week14 file");
glutDisplayFunc(display);
glutMainLoop();
}
▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲
沒有留言:
張貼留言