到 http://www.cmlab.csie.ntu.edu.tw/~jsyeh/3dcg10/
下載老師編輯的"data","win32(window系統)",和
"glut32.dll" 將其解壓縮後即可操作一些成品
(A)Translate移動
Roate旋轉
Scale大小
先進行移動後旋轉,是移動後才旋轉,就像芭蕾舞
,先到點才旋轉,所以是像在自體旋轉一樣
然後旋轉的時候沒有移動的感覺也沒有遠近



(B)Roate旋轉
Translate移動
Scale大小
先旋轉再進行移動,先旋轉角度才進行移動
就像原地圓圈甩尾,車子旋轉向前,
所以有在旋轉的時候有移動遠近的感覺



茶壺旋轉

#include <GL/glut.h>
float rotX=0;//加上X旋轉代數
void display()
{
glClearColor(1,1,1,1);
glClear(GL_COLOR_BUFFER_BIT);
glPushMatrix();///記住
glRotatef(rotX,0,1,0);//設X旋轉
glColor3f(1,0,0);
glutSolidTeapot(0.3);
glPopMatrix();回到初始狀態
glutSwapBuffers();
}
void motion(int x,int y)//旋轉
{
rotX=x;
display();//播放
}
int main(int argc,char**argv)
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("HELLO 3D");
glutDisplayFunc(display);
glutMotionFunc(motion);
glutMainLoop();
}
Q1:什麼是glPushMatrix();
glPopMatrix();
A1:glPushMatrix()是記住自己現在的位置
glPopMatrix()是回到之前記住的位置
Q2:什麼是Buffers?
Double?
A2:Buffers指的是緩存器,就像是記憶體
Double指的是說兩倍的,這裡是說Double_Buffers
是說有兩倍的記憶體,他會先將畫好的東西先紀錄起來,然後再一次print出來
效果比較好
加強版remix

#include <GL/glut.h>
float rotX=0,rotY=0;///多加上Y旋轉代數
void display()
{
glClearColor(1,1,1,1);
glClear(GL_COLOR_BUFFER_BIT);
glPushMatrix();
glRotatef(rotY,1,0,0);設Y旋轉
glRotatef(rotX,0,1,0);
glColor3f(1,0,0);
glutSolidTeapot(0.3);
glPopMatrix();
glutSwapBuffers();
}
void motion(int x,int y)//旋轉
{
rotX=x;
rotY=y;
display();
}
int main(int argc,char**argv)
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
glutInitWindowSize(400,400);///設定視窗的大小
glutInitWindowPosition(400,400);///設定視窗左上角之初始位置
glutCreateWindow("HELLO 3D");
glutDisplayFunc(display);
glutMotionFunc(motion);
glutMainLoop();
}

沒有留言:
張貼留言