期中小考
1. glPushMatrix();備份矩陣 7. glEnd();結束畫
2. glPopMatrix();還原矩陣 8. glColor(R,G,B);顏色
3. glTranslatef(x,y,z);移動 9. glTexcoord2f(tx,ty);貼圖座標
4. glRotatef(角度,x,y,z);旋轉 10. glNomal3f(nx,ny,nz);打光的法向量
5. glScalef(x,y,z);縮放 11. glVertex2f(x,y);頂點
6. glBegin(GL_POLYGUN);開始畫
程式碼結構解釋
glutSolid(實心)+形狀(...);
EX:
glutSolidSphere(1半徑,slices直切分段,stacks橫切分段);
glutSolidCone(1半徑,1高度,slices直切分段,stacks橫切分段);
glutSolidTorus(1小圓,1大圓,slices直切分段,stacks橫切分段);
glutWire(非實心)+形狀(...);
旋轉圖形製作關節
#include <GL/glut.h>
void upper_arm()
{
glPushMatrix();
glScalef(1,0.3,0.3);
glutSolidCube(0.5);//畫製實心四方體
glPopMatrix();
}
float angle=0;
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPushMatrix();
glTranslatef(0.5,0.5,0);//由下面往上做所以最後把旋轉的以下所有東西移到(0.5,0.5)的地方
glRotatef(angle, 0,0,1);//以z軸旋轉
glTranslatef(0.25,0,0);//由下面往上做所以會先移動把軸心以x軸移動0.25
upper_arm();
glPopMatrix();
angle++;
glutSwapBuffers();
}
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("Week09");
glutIdleFunc(display);
glutDisplayFunc(display);
glutMainLoop();
}
以另一個矩陣做軸心
#include <GL/glut.h>
void upper_arm()
{
glPushMatrix();
glScalef(1,0.3,0.3);
glutSolidCube(0.5);
glPopMatrix();
}
float angle=0;
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPushMatrix();
glTranslatef(-0.23,0,0);
glRotatef(-angle, 0,0,1);
glTranslatef(-0.25,0,0);
glColor3f(0,1,0);
upper_arm();
glPushMatrix();
glTranslatef(-0.26,0,0);
glRotatef(-angle, 0,0,1);
glTranslatef(-0.25,0,0);
glColor3f(1,1,0);
upper_arm();
glPopMatrix();
glPopMatrix();///右邊
glPushMatrix();
glTranslatef(-0.23,0,0);
glRotatef(-angle, 0,0,1);
glTranslatef(-0.25,0,0);
glColor3f(0,1,0);
upper_arm();
glPushMatrix();
glTranslatef(-0.26,0,0);
glRotatef(-angle, 0,0,1);
glTranslatef(-0.25,0,0);
glColor3f(1,1,0);
upper_arm();
glPopMatrix();
glPopMatrix();///左邊
angle++;
glutSwapBuffers();
}
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("Week09");
glutIdleFunc(display);
glutDisplayFunc(display);
glutMainLoop();
}







沒有留言:
張貼留言