2022年3月21日 星期一

09163076 week05

 1.1 下載Win32的Example範例

       https://jsyeh.org/3dcg10/

      下載[data].[win32]

1.2 windows.zip解壓縮至"windows\"

1.3 將data移至windows

1.4 打開Transformation.exe

1.5 選擇soccerball

2.1 調整glRotatef (x,y,z)旋轉軸,改變物體旋轉角度

2.2 (1.00,0.00,0.00)旋轉軸向右,物體旋轉角度前空翻(如安培右手定則)

2.3 (0.00,1.00,0.00)旋轉軸向上,物體旋轉角度右肩先出(如安培右手定則)

2.4 (0.00,0.00,1.00)旋轉軸向螢幕外射出,物體旋轉角度向螢幕左邊側空翻(如安培右手定則)

3.  茶壺旋轉180度

#include <GL/glut.h>

void display()

{

    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    glPushMatrix();///矩陣備份

        glRotatef(180,0,0,1);///轉180度

        glColor3f(1,1,0);

        glutSolidTeapot(0.3);

    glPopMatrix();

    glutSwapBuffers();

}

int main(int argc,char**argv)

{

    glutInit(&argc,argv);

    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);

    glutCreateWindow("week05 Rotate");

    glutDisplayFunc(display);

    glutMainLoop();

    return 0;

}

4. 可使用滑鼠使茶壺轉動

#include <GL/glut.h>

float angle=0;

void display()

{

    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    glPushMatrix();///矩陣備份

        glRotatef(angle,0,0,1);///轉180度

        glColor3f(1,1,0);

        glutSolidTeapot(0.3);

    glPopMatrix();

    glutSwapBuffers();

}

void motion(int x,int y)

{

    angle=x;

    display();

}

int main(int argc,char**argv)

{

    glutInit(&argc,argv);

    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);

    glutCreateWindow("week05 Rotate");

    glutDisplayFunc(display);

    glutMotionFunc(motion);

    glutMainLoop();

}

5. 使用滑鼠使茶壺轉動2

#include <GL/glut.h>

float angle=0,oldX=0;

void display()

{

    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    glPushMatrix();///矩陣備份

        glRotatef(angle,0,0,1);///轉180度

        glColor3f(1,1,0);

        glutSolidTeapot(0.3);

    glPopMatrix();///還原矩陣

    glutSwapBuffers();

}

void mouse(int button,int state,int x,int y)

{

    oldX=x;

}

void motion(int x,int y)

{

    angle+=(x-oldX);

    oldX=x;

    display();

}

int main(int argc,char**argv)

{

    glutInit(&argc,argv);

    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);

    glutCreateWindow("week05 Rotate");


    glutDisplayFunc(display);

    glutMouseFunc(mouse);

    glutMotionFunc(motion);

    glutMainLoop();

}

6. 複習上週mouse 用滑鼠畫圖(1)

7.複習上周mouse 用滑鼠畫圖(2)

#include <stdio.h>

#include <GL/glut.h>

int N=0;

int x[1000],y[1000];

void display()

{

    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    glBegin(GL_LINE_LOOP);

    for(int i=0;i<N;i++){

            glVertex2f((x[i]-150)/150.0,-(y[i]-150)/150.0);

    }

    glEnd();

    glutSwapBuffers();

}

void motion(int mouseX,int mouseY)

{

        N++;

        x[N-1]=mouseX;

        y[N-1]=mouseY;

        printf("現在按下滑鼠,得到新座標 %d %d\n",x[N-1],y[N-1]);

    display();

}

int main(int argc,char**argv)

{

    glutInit(&argc,argv);

    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);

    glutCreateWindow("week05 複習 mouse");


    glutDisplayFunc(display);

    glutMotionFunc(motion);

    glutMainLoop();

}









沒有留言:

張貼留言