在下方網址照著之前的步驟下載下來
http://www.cmlab.csie.ntu.edu.tw/~jsyeh/3dcg10/
今天先複習之前所做的事情,這次則是要開啟Transformation.exe這個檔案
把3D模型換成黑幫老大 : 右上視窗>右鍵>All Capone
玩玩下面的數值看他的變化,你會發現第1個是移動,第2個是旋轉,第3個是放大縮小
今天的重點是轉向,你會覺得很奇怪為什麼有四個數值,明明只有X、Y、Z這三個軸,
使用它時有幾個數值沒什麼變化,但是突然變成負數的時候會變成反面,因為它就是用來挑整軸方向的數值,原本的Y軸是往上,使用它的時候就可以變成向下。
數值如 : ( 轉的角度 , X軸使用比例 , Y軸使用比例 , Z軸使用比例 )
下面給幾個實例:
接下來是實作練習----------------------------------------------------------------
display函式是我們顯示圖樣的作業,所以先從他下手
我們會看到上面我們學的程式碼上都有用的 ""a"" 變數作旋轉。
這次用motion程式並設置function,還記得我們用函式都要在main()引用

我們用一個變數等下套用在變數"a"
angle套用在變數"a"
就會發現那三個物體會照著你滑鼠轉動了!!
我們重新作一次如下:照茶壺做法>添加剛剛學的程式碼在下方
補充 :
因為程式沒有刷新圖案,移動中的圖案都會留下,所以要清除需要藍色的程式把他們清除
這樣茶壺是不是就也會轉動了呢?
我們作一個mouse不斷記錄下x的位置再減去之前的位置,主要是要算出它移動量在進行疊加,這樣angle就不會再歸零了!!
最後程式碼提供在下方:
========================================================================
#include <GL/glut.h>
float angle=0,oldX=0;
void motion(int x,int y)
{
angle+=(x-oldX);///angle=x;
oldX=x;
glutPostRedisplay();
}
void mouse(int button, int state, int x, int y)
{
oldX=x;
}
static void display(void)
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPushMatrix();
glRotatef (angle,0,0,1);
glutSolidTeapot(0.3);
glPopMatrix();
glutSwapBuffers();
}
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("Week04");
glutDisplayFunc(display);
glutMotionFunc(motion);
glutMouseFunc(mouse);
glutMainLoop();
}








沒有留言:
張貼留言