1.主題:移動Translate.旋轉Rotate.縮放Scale
(1)先到http://www.cmlab.csie.ntu.edu.tw/~jsyeh/3dcg10/ 下載3個檔案
(2)把windows.data解壓縮,再把data資料夾和glut32.dull放到windows資料裡
(3)再打開Transformation檔案
2.會移動的茶壺(用座標移動)
(1)用Code Blocks開啟GLUT方案(freeglut),再修改程式碼
多加glPushMatrix(); ///備份起來
glTranslatef(0,1,0);
glutSolidTeapot(0.3);
glPopMatrix(); ///還原回去
glutSolidTeapot(0.3);
glPopMatrix(); ///還原回去
3.會移動的茶壺(用滑鼠拖移移動)
#include <GL/glut.h>
float mouseX=0,mouseY=0;static void display(void)
{
glClear(GL_COLOR_BUFFER_BIT| GL_DEPTH_BUFFER_BIT);
float mouseX=0,mouseY=0;static void display(void)
{
glClear(GL_COLOR_BUFFER_BIT| GL_DEPTH_BUFFER_BIT);
glPushMatrix(); ///備份起來
glTranslatef(mouseX,mouseY,0);
glutSolidTeapot(0.3);
glPopMatrix(); ///還原回去
glutSolidTeapot(0.3);
glPopMatrix(); ///還原回去
glutSwapBuffers();
}
void motion(int x,int y)
{
mouseX=(x-150)/150.0;
mouseY=-(y-150)/150.0;
glutPostRedisplay();
}
}
void motion(int x,int y)
{
mouseX=(x-150)/150.0;
mouseY=-(y-150)/150.0;
glutPostRedisplay();
}
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("GLUT Shapes");
glutDisplayFunc(display);
glutMotionFunc(motion);
glutMainLoop();
return EXIT_SUCCESS;
}
}
4.會縮放的茶壺
把glTranslatef(mouseX,mouseY,0); 改成glScalef(mouseX,mouseY,0);
#include <GL/glut.h>
float mouseX=0,mouseY=0;
static void display(void)
{
glClear(GL_COLOR_BUFFER_BIT| GL_DEPTH_BUFFER_BIT); ///清除舊的畫面
float mouseX=0,mouseY=0;
static void display(void)
{
glClear(GL_COLOR_BUFFER_BIT| GL_DEPTH_BUFFER_BIT); ///清除舊的畫面
glPushMatrix(); ///備份起來
glScalef(mouseX,mouseY,0); ///改Size縮放
glutSolidTeapot(0.3);
glPopMatrix(); ///還原回去
glScalef(mouseX,mouseY,0); ///改Size縮放
glutSolidTeapot(0.3);
glPopMatrix(); ///還原回去
glutSwapBuffers(); ///交換繪圖的memory buffer,才能畫出來
}
void motion(int x,int y)
{
mouseX=(x-150)/150.0;
mouseY=-(y-150)/150.0;
glutPostRedisplay(); ///貼一張3M Post便利貼,告訴電腦的GLUT要重畫畫面Re display
}
void motion(int x,int y)
{
mouseX=(x-150)/150.0;
mouseY=-(y-150)/150.0;
glutPostRedisplay(); ///貼一張3M Post便利貼,告訴電腦的GLUT要重畫畫面Re display
}
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("GLUT Shapes");
glutDisplayFunc(display);
glutMotionFunc(motion);
glutMainLoop();
return EXIT_SUCCESS;
}
}
5.會旋轉的茶壺
滑鼠沿著X軸旋轉
#include <GL/glut.h>
float mouseX=0,mouseY=0,rotX=0;
static void display(void)
{
glClear(GL_COLOR_BUFFER_BIT| GL_DEPTH_BUFFER_BIT); ///清除舊的畫面
float mouseX=0,mouseY=0,rotX=0;
static void display(void)
{
glClear(GL_COLOR_BUFFER_BIT| GL_DEPTH_BUFFER_BIT); ///清除舊的畫面
glPushMatrix(); ///備份起來
//glScalef(mouseX,mouseY,0); ///改Size縮放
//glScalef(mouseX,mouseY,0); ///改Size縮放
glRotatef(rotX,0,0,1);
glutSolidTeapot(0.3);
glPopMatrix(); ///還原回去
glPopMatrix(); ///還原回去
glutSwapBuffers(); ///交換繪圖的memory buffer,才能畫出來
}
void motion(int x,int y)
{
mouseX=(x-150)/150.0;
mouseY=-(y-150)/150.0;
}
void motion(int x,int y)
{
mouseX=(x-150)/150.0;
mouseY=-(y-150)/150.0;
rotX=x;
glutPostRedisplay(); ///貼一張3M Post便利貼,告訴電腦的GLUT要重畫畫面Re display
glutPostRedisplay(); ///貼一張3M Post便利貼,告訴電腦的GLUT要重畫畫面Re display
}
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("GLUT Shapes");
glutDisplayFunc(display);
glutMotionFunc(motion);
glutMainLoop();
return EXIT_SUCCESS;
}
}










沒有留言:
張貼留言