2016年3月21日 星期一

Week05_03161076

Week05

課堂作業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();
}

沒有留言:

張貼留言