1.先了解今日上課內容目的
先到這個網址jsyeh/3dcg10/
然後下載[data][win32]glut32.dll
再把win32解壓縮
將data跟glut32.dll丟進去
之後開啟Transformation.exe檔案
就可以執行這個程式囉
2.移動Translate
先印出茶壺
程式碼加上
glPushMatrix();//備份起來
glTranslatef(0,1,0);
glPopMatrix();//還原回去
這樣執行出來就可以移動了
程式碼:
#include <GL/glut.h>
void display()
{
glPushMatrix();//備份起來
glTranslatef(0,1,0);
glutSolidTeapot(0.3);
glPopMatrix();//還原回去
glutSwapBuffers();
}
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("04162550 translate rotate scale");
glutDisplayFunc(display);
glutMainLoop();
}
3.會隨著滑鼠做動作的茶壺
用上面的程式碼再多加幾行
茶壺就可以隨著滑鼠移動了
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glTranslatef(mouseX,mouseY,0);
void motion(int x,int y){
mouseX=(x-150)/150.0;
mouseY=-(y-150)/150.0;
glutPostRedisplay();
}
glutMotionFunc(motion);
這樣就可以移動了
程式碼:
#include <GL/glut.h>
float mouseX=0,mouseY=0;
void display()
{
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glPushMatrix();//備份起來
glTranslatef(mouseX,mouseY,0);
glutSolidTeapot(0.3);
glPopMatrix();//還原回去
glutSwapBuffers();
}
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);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("04162550 translate rotate scale");
glutDisplayFunc(display);
glutMotionFunc(motion);
glutMainLoop();
}
4.縮放茶壺
可以讓茶壺變大變小翻過來翻過去
超酷的!!
程式碼:#include <GL/glut.h>
float mouseX=0,mouseY=0;
void display()
{
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);//清掉舊的畫面
glPushMatrix();//備份起來
glScalef(mouseX,mouseY,0);//改size縮放
glutSolidTeapot(0.3);
glPopMatrix();//還原回去
glutSwapBuffers();//交換繪圖的mmory buffer,才能輸出來
}
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);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("04162550 translate rotate scale");
glutDisplayFunc(display);
glutMotionFunc(motion);
glutMainLoop();
}
5.旋轉茶壺
增加旋轉的幾行程式
rotX=0;
glRotatef(rotX,0,0,1);
rotX=x;
程式碼:#include <GL/glut.h>
float mouseX=0,mouseY=0,rotX=0;
void display()
{
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);//清掉舊的畫面
glPushMatrix();//備份起來
glRotatef(rotX,0,0,1);
glutSolidTeapot(0.3);
glPopMatrix();//還原回去
glutSwapBuffers();//交換繪圖的mmory buffer,才能輸出來
}
void motion(int x,int y)
{
mouseX=(x-150)/150.0;
mouseY=-(y-150)/150.0;
rotX=x;
glutPostRedisplay();
}
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("04162550 translate rotate scale");
glutDisplayFunc(display);
glutMotionFunc(motion);
glutMainLoop();
}






沒有留言:
張貼留言