Week13
week13-1_glm_gundam_keyboard
_angleID_mouse_motion_angle
1. 安裝freeglut,複製libfreeglut.a改成libglut32.a
2. 下載OpenCV選第2或3選項別選第1個
3. 安裝在預設的目錄,重開CodeBlocks(讓編譯器讀到檔案)
3.0 去設定 Settings->Compiler 要加3個設定
3.1 search目錄 Compiler的 include目錄 加C:\OpenCV2.1\include
3.2 search目錄 Linker 的 lib目錄 加C:\OpenCV2.1\lib
3.3 加入Linker設定的 3個檔名 cv210 cxcore210 highgui210
4. 將week12-3_glm_gundam_keyboard_angleID_mouse_motion_angle
改成week13-1_glm_gundam_keyboard_angleID_mouse_motion_angle
改成week13-1_glm_gundam_keyboard_angleID_mouse_motion_angle
5. 新增用鍵盤控制旋轉關節
註解掉//float angle = 0, da = 1;
float angle[20] = {};///設20個角度
int angleID = 0;///當個角度的index
void motion(int x, int y){
angle[angleID] = y;
glutPostRedisplay();///要重畫畫面
}
void keyboard(unsigned char key, int x,int y){
if(key=='0') angleID = 0;
if(key=='1') angleID = 1;
if(key=='2') angleID = 2;
if(key=='3') angleID = 3;
}
void display(){
中的angle改成angle[0]
angle[1]
}
中的angle改成angle[0]
angle[1]
}
int main(){
glutKeyboardFunc(keyboard);///week13用鍵盤控制哪個關節轉動
}
輸出用滑鼠改變的角度,並生成angle.txt的檔案來記錄
1. 將week13-1_glm_gundam_keyboard_angleID_mouse_motion_angle
改成week13-2_FILE_fopen_fprintf_fscanf
改成week13-2_FILE_fopen_fprintf_fscanf
2. 加FILE指標
‵‵‵cpp
FILE * fin = NULL;
FILE * fout = NULL;
‵‵‵
3. motion()修改
void motion(int x, int y){
angle[angleID] += y-oldY;
oldX = x;
oldY = y;
glutPostRedisplay();///要重畫畫面
if(fout==NULL) fout = fopen("angle.txt", "w+");
for(int i=0;i<20;i++){
printf("%.1f ",angle[i] );
fprintf(fout,"%.1f ",angle[i] );
}
printf("\n");
fprintf(fout,"\n");
}
長按R鍵 會讀取txt檔案中的座標並進行轉動
void keyboard(unsigned char key, int x, int y){
if(key=='r'){
if(fin==NULL) fin = fopen("angle.txt", "r");
for(int i=0;i<20;i++){
fscanf(fin,"%f", &angle[i] );
}
glutPostRedisplay();
}
if(key=='0') angleID = 0;
if(key=='1') angleID = 1;
if(key=='2') angleID = 2;
if(key=='3') angleID = 3;
}
5. 新增鋼彈身體
GLMmodel * body = NULL;
void drawBody(void)
{
if (!body) {
body = glmReadOBJ("data/body.obj");
if (!body) exit(0);
glmUnitize(body);
glmFacetNormals(body);
glmVertexNormals(body, 90.0);
}
glmDraw(body, GLM_SMOOTH | GLM_TEXTURE);
}
void dispaly(){
修改
drawBody();///畫剛彈身體
glTranslatef(-0.1, 0, 0);///掛在肩上
glTranslatef(-0.1, 0, 0);///掛在肩上
}
7. 改成控制4個關節點
void display()
{
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glDisable(GL_TEXTURE_2D);
glPushMatrix();
glRotatef(angle[0], 0, 1, 0);
drawBody();///畫剛彈身體
//glutSolidSphere(0.1, 30, 30);///關節點
glEnable(GL_TEXTURE_2D);
glColor3f(1, 1, 1);
glPushMatrix();
glTranslatef(-0.1, 0, 0);///掛在肩上
glRotatef(angle[1], 0, 0, 1);
glRotatef(angle[2], 1, 0, 0);
glTranslatef(0, -0.07, 0);
drawUpperA();
glPushMatrix();
glTranslatef(-0.02, -0.09, 0);///(3)掛到上手臂上
glRotatef(angle[3], 1, 0, 0);///(2)x軸轉
glTranslatef(0, -0.21, 0);///(1)
drawLowerA();///
glPopMatrix(); ///
glPopMatrix(); ///
glPopMatrix();
glutSwapBuffers();
}
Github
沒有留言:
張貼留言