課堂作業01-1
下載jsyeh.org/3dcg10 中的
(1)windows
(2)data
(3)glut.dill
{[(glBegin+glScale放大縮小)+glRotate旋轉]+glTranslate移動}
先移動,最後控制旋轉的時候,會繞著物體的位子旋轉
{[(glBegin+glScale放大縮小)+glTranslate移動]+glRotate旋轉}
先移動物體,再繞著同心圓旋轉
課堂作業01-2
有一台我的車子,先放到右邊,再旋轉,會繞著餐桌旋轉
課堂作業01-3
有一台我的車子,先將他放到右邊,再做旋轉,但是因為程式碼不一樣,先做旋轉,再做移動,我的車子會以自己為中心,繞著自己旋轉。
課堂作業02-1
#include <GL/glut.h>
float rotX=0;
void display()
{
glClearColor(1,1,1,1);
glClear(GL_COLOR_BUFFER_BIT);//清背景
glPushMatrix();
glRotatef(rotX,0,1,0);
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); // 使用滑鼠移動的motion函式
glutMainLoop();
}
Question
1.什麼是glPushMatrix? 把東西放進去,記住
2.什麼是glPopMatrix? 還原到剛剛push的樣子
3.什麼是 Double Buffers? 兩倍記憶體
課堂作業02-2
另外!!
glRotatef(rotX,0,1,0); 改成 glRotatef(rotX,1,0,0);
rotX=x; 改成 rotX=y;
就可以把茶壺由左右旋轉改成上下旋轉
""""""""""""""""""""""註"""""""""""""""""""""""""
"" ""
"" glRotatef(rotX,0,1,0); (角度,x,y,z) ""
"" ""
""""""""""""""""""""""""""""""""""""""""""""""""""
課堂作業02-3
↑↑↑↑↑新增rotY的旋轉,使茶壺能夠上下左右的旋轉!↑↑↑↑↑↑↑
#include <GL/glut.h>
float rotX=0, rotY=0;
void display()
{
glClearColor(1,1,1,1);
glClear(GL_COLOR_BUFFER_BIT);
glPushMatrix();
glRotatef(rotX,0,1,0); //X軸的移動量,使他對著X軸旋轉
glRotatef(rotY,1,0,0); //Y軸的移動量,使他對著Y軸旋轉
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);
glutCreateWindow("Hello 3D");
glutDisplayFunc(display);
glutMotionFunc(motion);
glutMainLoop();
}
再增加2行程式碼
glutInitWindowSize(700,700);// 視窗大小
glutInitWindowPosition(600,0);//視窗開啟時於螢幕的位置
於
glutCreateWindow("Hello 3D");//開啟式窗
前面!!!(先設定初始值,再開啟視窗,所以要將程式碼放於Hello 3D前面。)
回家作業
試做


void display()
{
glClearColor(1,1,1,1);
glClear(GL_COLOR_BUFFER_BIT);
glPushMatrix();
glRotatef(rotX,0,1,0);
glRotatef(rotY,1,0,0);
glColor3f(1,0,0);
把程式加在這裡!!!!
glPopMatrix();
glutSwapBuffers();
}
glutInitWindowSize(700,700);// 視窗大小
glutInitWindowPosition(600,0);//視窗開啟時於螢幕的位置
於
glutCreateWindow("Hello 3D");//開啟式窗
前面!!!(先設定初始值,再開啟視窗,所以要將程式碼放於Hello 3D前面。)
回家作業
試做
void display()
{
glClearColor(1,1,1,1);
glClear(GL_COLOR_BUFFER_BIT);
glPushMatrix();
glRotatef(rotX,0,1,0);
glRotatef(rotY,1,0,0);
glColor3f(1,0,0);
把程式加在這裡!!!!
glPopMatrix();
glutSwapBuffers();
}
沒有留言:
張貼留言