今天考了GL的10種涵式 共11行
glPushMatrix();//備份矩陣glTranslatef(x,y,z);//移動
glRotatef(angle,x,y,z);//轉動
glScalef(x,y,z);//縮放
glBegin(GL_POLYGON);//開始畫
glColor3f(r,g,b);//色彩
glTexCoord2f(tx,ty);//貼圖座標
glNormal3f(nx,ny,nz);//打光的法向量
glVertex2f(x,y);//頂點
glEnd();//結束畫
glPopMatrix();//還原矩陣
--------------------------------------------------------------------------------------------------------------------------
練習一
開啟CODEBLOCK建立一個新的glut專案,嘗試調整glutSolid的參數去改變形狀
如圖,我改了實心cone的參數
以下為修改glutSolid參數的位子
--------------------------------------------------------------------------------------------------------------------------
開始今天的第一個程式
做出一個旋轉的長方形
程式碼如下
#include <Gl/glut.h>
void upper_arm()
{
glPushMatrix();///備份
glScalef (1, 0.3, 0.3);///X不便,y, Z 都變 1/3
glutSolidCube(0.5);
glPopMatrix(); ///還原
}
float angle=0;///TODO:
void display()
{
glClear(GL_COLOR_BUFFER_BIT |
GL_DEPTH_BUFFER_BIT);
glPushMatrix();///備份
glTranslatef(0.5,0.5,0);///可以改變旋轉位子
glRotatef (angle,
0,0,1); ///對Z軸旋轉///TODO:
glTranslatef(0.2,0,0);///可以改變旋轉軸心
upper_arm() ;///用函式呼叫自己寫的程式
glPopMatrix (); ///還原
angle++;///TODO:
glutSwapBuffers();
}
int main(int
argc, char**argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE|
GLUT_DEPTH);
glutCreateWindow("week09");
glutIdleFunc(display);///TODO:
glutDisplayFunc(display);
glutMainLoop();
}
加入glTranslatef(0.2,0,0);同上
--------------------------------------------------------------------------------------------------------------------------
加入上下臂做手臂,做出左右手
如圖
程式碼:
#include <Gl/glut.h>
void upper_arm()
{
glPushMatrix();///備份
glScalef (1, 0.3, 0.3);///X不便,y, Z 都變 1/3
glutSolidCube(0.5);
glPopMatrix(); ///還原
}
float angle=0;///TODO:
void display()
{
glClear(GL_COLOR_BUFFER_BIT |
GL_DEPTH_BUFFER_BIT);
glPushMatrix();///備份(右手)
glTranslatef(0.2,0,0);///可以改變旋轉位子
glRotatef (angle,
0,0,1); ///對Z軸旋轉///TODO:
glTranslatef(0.25,0,0);///可以改變旋轉軸心
glColor3f(1,0,0);///畫紅色的手(上手臂)
upper_arm() ;///用函式呼叫自己寫的程式
glPushMatrix();///備份
glTranslatef(0.25,0,0);///可以改變旋轉位子
glRotatef (angle,
0,0,1); ///對Z軸旋轉///TODO:
glTranslatef(0.25,0,0);///可以改變旋轉軸心
glColor3f(1,1,0);///畫黃色的手(下手臂)
upper_arm() ;///用函式呼叫自己寫的程式
glPopMatrix (); ///還原
glPopMatrix (); ///還原
glPushMatrix();///備份(左手)
glTranslatef(-0.2,0,0);///可以改變旋轉位子
glRotatef (-angle,
0,0,1); ///對Z軸旋轉///TODO:
glTranslatef(-0.25,0,0);///可以改變旋轉軸心
glColor3f(1,0,0);///畫紅色的手(上手臂)
upper_arm() ;///用函式呼叫自己寫的程式
glPushMatrix();///備份
glTranslatef(-0.25,0,0);///可以改變旋轉位子
glRotatef (-angle,
0,0,1); ///對Z軸旋轉///TODO:
glTranslatef(-0.25,0,0);///可以改變旋轉軸心
glColor3f(1,1,0);///畫黃色的手(下手臂)
upper_arm() ;///用函式呼叫自己寫的程式
glPopMatrix (); ///還原
glPopMatrix (); ///還原 angle++;///TODO:
glutSwapBuffers();
}
int main(int
argc, char**argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE|
GLUT_DEPTH);
glutCreateWindow("week09");
glutIdleFunc(display);///TODO:
glutDisplayFunc(display);
glutMainLoop();
}




沒有留言:
張貼留言