一.轉動
畫一個紅色的方形~~~#include <GL/glut.h>
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPushMatrix();///備份矩陣
glColor3f(1,0,0);///紅色
glScalef(0.5,0.2,0.2);///調大小
glutSolidCube(1);///正方塊
glPopMatrix();///還原矩陣
glutSwapBuffers();
}
int main (int argc,char**argv)
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("week9");
glutDisplayFunc(display);
glutMainLoop();
}
運行結果如下

再畫一個黃色,並將重複的程式碼用自訂函式替代
#include <GL/glut.h>
void mycube()///用自己的函式簡化程式碼
{
glPushMatrix();///備份矩陣
glScalef(0.5,0.2,0.2);///調大小
glutSolidCube(1);///正方塊
glPopMatrix();///還原矩陣
}
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPushMatrix();
glColor3f(1,0,0);///紅色
mycube();
glTranslatef(0.4,0.1,0);
glColor3f(1,1,0);///黃色
mycube();
glPopMatrix();
glutSwapBuffers();
}
int main (int argc,char**argv)
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("week9");
glutDisplayFunc(display);
glutMainLoop();
}
運行結果

畫面中只有紅色方塊,且會以中心點旋轉
#include <GL/glut.h>
void mycube()
{
glPushMatrix();
glColor3f(1,0,0);
glScalef(0.5,0.2,0.2);
glutSolidCube(1);
glPopMatrix();
}
float angle=0;///轉動變數
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPushMatrix();
glRotatef(angle, 0,0,1);///轉動
mycube();
glPopMatrix();
angle+=1;///角度增加
glutSwapBuffers();
}
int main (int argc,char**argv)
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("week9");
glutIdleFunc(display);///CPU有空閒(idle)時,就重畫畫面
glutDisplayFunc(display);
glutMainLoop();
}

把要轉動的中心點,放到畫面中心
#include <GL/glut.h>
void mycube()
{
glPushMatrix();
glColor3f(1,0,0);
glScalef(0.5,0.2,0.2);
glutSolidCube(1);
glPopMatrix();
}
float angle=0;
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPushMatrix();
glRotatef(angle, 0,0,1);
glTranslatef(0.22,0,0);///把要轉動的中心點,放到畫面中心
mycube();
glPopMatrix();
angle+=1;
glutSwapBuffers();
}
int main (int argc,char**argv)
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("week9");
glutIdleFunc(display);
glutDisplayFunc(display);
glutMainLoop();
}
運行結果
二.TRT轉動
由於繪圖矩陣的計算方式,單個繪圖時,是由下往上喔!!!!
#include <GL/glut.h>
void mycube()
{
glPushMatrix();
glColor3f(1,0,0);
glScalef(0.5,0.2,0.2);
glutSolidCube(1);
glPopMatrix();
}
float angle=0;
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPushMatrix();
glTranslatef(0.3,0.3,0);///3.把整個在關節處轉動的方形移到想要的位置
glRotatef(angle, 0,0,1);///2.轉動
glTranslatef(0.22,0,0);///1.把要轉動的中心點,放到畫面中心
mycube();
glPopMatrix();
angle+=1;
glutSwapBuffers();
}
int main (int argc,char**argv)
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("week9");
glutIdleFunc(display);
glutDisplayFunc(display);
glutMainLoop();
}
運行結果


沒有留言:
張貼留言