1.設定
- 設定檔案
- 設定目錄:從專案.cbp使用text軟體編輯,將路徑改成"."
這樣就可以把檔案只存在專案資料夾裡2.套入多個模型
先準備Week10的Al模型(複習)
void drawBody()
{
if(pmodelA==NULL){
pmodelA=glmReadOBJ("Al.obj");///執行目錄裡,有個Al.obj檔+Al.mtl檔
glmUnitize(pmodelA);///設成單位大小
glmFacetNormals(pmodelA);///重算(面)法向量
glmVertexNormals(pmodelA, 90);///重算(點)法向量
}
glPushMatrix();
glRotatef(180, 0,1,0);///對Y轉180度,向正面
glmDraw(pmodelA, GLM_SMOOTH | GLM_MATERIAL);
glPopMatrix();
}
int angle=30;///設定角度,以便後面做自動旋轉
void drawArm()
{
if(pmodelB==NULL){
pmodelB=glmReadOBJ("porsche.obj");///車子的模型
glmUnitize(pmodelB);
glmFacetNormals(pmodelB);
glmVertexNormals(pmodelB, 90);
}
glPushMatrix();
glRotatef(90, 0,1,0);
glScalef(0.5, 0.5, 0.5);
glmDraw(pmodelB, GLM_SMOOTH | GLM_MATERIAL);
glPopMatrix();
}
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
drawBody();
glPushMatrix();
glTranslatef(0.5, 0.5, 0);///第3個,TRT
glRotatef(angle, 0,0,1);///第2個,TRT
glTranslatef(0.25, 0,0);///第1個,TRT
drawArm();
glPopMatrix();
glutSwapBuffers();
}
![]() |
| 成果 |
3.旋轉
int oldX, oldY;
void mouse(int button, int state, int x, int y)
{
oldX=x;
}
void motion(int x, int y)
{
angle += (x-oldX);
oldX=x;
glutPostRedisplay();
}
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
///glutSolidSphere(0.1, 30,30);///原點、圓心
drawBody();
glPushMatrix();///右手臂
glTranslatef(0.5, 0.4, 0);///第3個T
glRotatef(angle, 0,0,1);///第2個R
glTranslatef(0.3, 0, 0);///第1個T
drawArm();///右上手臂
glPushMatrix();
glTranslatef(0.25, 0, 0);///第3個T
glRotatef(angle, 0,0,1);///第2個R
glTranslatef(0.3, 0, 0);///第1個T
drawArm();///右下手臂
glPopMatrix();
glPopMatrix();
glPushMatrix();///左手臂
glTranslatef(-0.5, 0.4, 0);///第3個T
glRotatef(angle, 0,0,1);///第2個R
glTranslatef(-0.3, 0, 0);///第1個T
drawArm();///左上手臂
glPushMatrix();
glTranslatef(-0.25, 0, 0);///第3個T
glRotatef(angle, 0,0,1);///第2個R
glTranslatef(-0.3, 0, 0);///第1個T
drawArm();///左下手臂
glPopMatrix();
glPopMatrix();
glutSwapBuffers();
}
glutMotionFunc(motion);
glutMouseFunc(mouse);
4.控制旋轉
可以宣告陣列,然後透過按鍵 0 1 2 3 來控制要旋轉的物件
最後記得在main裡面加上
glutKeyboardFunc(keyboard);





沒有留言:
張貼留言