顯示具有 03163625_李承恩 標籤的文章。 顯示所有文章
顯示具有 03163625_李承恩 標籤的文章。 顯示所有文章

2019年5月31日 星期五

aaaaaa week 15

一,攝影機運鏡

下載 win32 data glut32.dll

開啟projection

第一欄 eye 控制鏡頭的 左右  上下  前後

第二欄center 看的位置

第三欄up 只有 x軸y軸能動

下載 source和freeglut專案 並開啟codeblock專案

source檔的glm.h 和 glm.c加入 專案資料夾 並且把glm.c改成.cpp

file  加入 glm.cpp

data 放入freeglut裡

把 projection 的程式碼放到專案裡

就可以開啟了

之後用老師給的程式碼


可以出現白白的人

加入打光  可以看到彩色的人
加入麥可貝風的運鏡

加入 glortho  轉得比較好

2019年5月24日 星期五

aaaaaa week14

主題一 計時

#include <GL/glut.h>
#include <mmsystem.h>///NOW (0)發聲音
void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    glutSwapBuffers();
}
void timer(int t)///NOW (2)
{
    glutTimerFunc(1000, timer, 0);///NOW2
    PlaySoundA("fart.wav", NULL, SND_ASYNC);///NOW (2)
}
int main(int argc, char**argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
    glutInitWindowSize(500,500);///大一點
    glutCreateWindow("week14 timer");

    glutDisplayFunc(display);
    glutTimerFunc(1000, timer, 30);///NOW (1)

    glutMainLoop();
}

老師給的第三個程式

能讓聲音隨著計時器播放

#include <GL/glut.h>
#include <mmsystem.h>///NOW (0)發聲音
#include <stdio.h>///NOW3 for printf()
float angle=0;///NOW4
void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glPushMatrix();///NOW4
        glRotatef(angle, 0, 0, 1);///NOW4
        glutSolidTeapot( 0.3 );///NOW4
    glPopMatrix();///NOW4
    glutSwapBuffers();
}
void timer(int t)///NOW (2)
{
    glutTimerFunc(30, timer, t+1);///NOW4 ///NOW3 一起床,馬上撥下一個鬧鐘, 時間才會準
    printf("現在的 timer(t)的t是: %d\n", t);///NOW3
    angle = t;///NOW4
    glutPostRedisplay();///NOW4 要更新畫面
}
int main(int argc, char**argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
    glutInitWindowSize(500,500);///大一點
    glutCreateWindow("week14 timer");

    glutDisplayFunc(display);
    glutTimerFunc(1000, timer, 0);///NOW (1)

    glutMainLoop();
}

新增一個茶壺,然後讓他隨著計時器的計數轉動


二.內插公式

#include <GL/glut.h>
#include <mmsystem.h>///NOW (0)發聲音
#include <stdio.h>///NOW3 for printf()
float angle=0;///NOW4
float nowX=0;///NOW5
void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glPushMatrix();///NOW4
        ///glRotatef(angle, 0, 0, 1);///NOW4
        glTranslatef(nowX, 0, 0);///NOW5
        glutSolidTeapot( 0.3 );///NOW4
    glPopMatrix();///NOW4
    glutSwapBuffers();
}
void timer(int t)///NOW (2)
{/// 1000 ms = 1秒,   33ms = 0.033秒 => 33*30=1000,  30fps
    glutTimerFunc(33, timer, t+1);///NOW4 ///NOW3 一起床,馬上撥下一個鬧鐘, 時間才會準
    printf("現在的 timer(t)的t是: %d\n", t);///NOW3
    float alpha = (t%30) / 30.0;///變成 alpha: 0.0 ~ 1.0  ///NOW5
    nowX = alpha*1.0 + (1-alpha)* -1.0;///NOW5

    glutPostRedisplay();///NOW4 要更新畫面
}
int main(int argc, char**argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
    glutInitWindowSize(500,500);///大一點
    glutCreateWindow("week14 timer");

    glutDisplayFunc(display);
    glutTimerFunc(1000, timer, 0);///NOW (1)

    glutMainLoop();
}

把 angle=t;  刪掉
加入這兩段程式碼做出動畫
  float alpha = (t%30) / 30.0;///變成 alpha: 0.0 ~ 1.0  ///NOW5
    nowX = alpha*1.0 + (1-alpha)* -1.0;///NOW5


三.動畫

用老師給的同學做的資料

在keyborad區加入 讀motion的程式

 if(fout==NULL) fout=fopen("motion.txt", "w+");///NOW1
        for(int i=0; i<20; i++){///NOW1
            fprintf(fout, "%.1f ", angle[i]);///NOW1
        }///NOW1
        fprintf(fout, "\n");///NOW1

2019年5月17日 星期五

aaaaaa week13

一.檔案

1.開啟貝殼專案

2.輸入程式碼


FILE * fout=NULL;
宣告檔案變數

int main()
{
    fout = fopen("filename.txt", "w+"); //開啟檔案
    for(int i=0;i<20;i++){
        fprintf( fout, "Hello world\n");  //把資料寫入檔案
    }
}

在專案資料夾能找到 filename.txt


#include<stdio.h>
FILE * fout=NULL;
float angle[20];
int main()
{
    fout = fopen("motion.txt", "w+");
    for(int i=0;i<20;i++){
        fprintf( fout, " %.1f", angle[i]);  改成輸出變數
    }
}



二. trt+很多東西複習

做茶壺

把茶壺當手臂 做出來



#include <GL/glut.h>
float angle[20];///NOW
void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    glPushMatrix();///body
        glColor3f(1,1,1);///white
        glutSolidTeapot( 0.3 );///body

        glPushMatrix();///right Arm
            glTranslatef(0.18, 0, 0);///(3)掛到肩上
            glRotatef(angle[1], 0,0,1);///(2)轉動 ///NOW
            glTranslatef(0.18, 0, 0);///(1)改變旋轉中心,放到中心

            glColor3f(1,0,0);///red
            glutSolidTeapot( 0.2 );///right upper arm

            glPushMatrix();///NOW2 長出下手臂
                glTranslatef(0.18, 0, 0);///(3)掛到肘上
                glRotatef(angle[1], 0,0,1);///(2)轉動 ///NOW
                glTranslatef(0.18, 0, 0);///(1)改變旋轉中心,放到中心

                glColor3f(1,0,0);///red
                glutSolidTeapot( 0.2 );///right lower arm

            glPopMatrix();
        glPopMatrix();

        glPushMatrix();///left Arm
            glTranslatef(-0.18, 0, 0);///(3)掛到肩上
            glRotatef(angle[1], 0,0,1);///(2)轉動 ///NOW
            glTranslatef(-0.18, 0, 0);///(1)改變旋轉中心,放到中心

            glColor3f(1,0,0);///red
            glutSolidTeapot( 0.2 );///left upper arm

            glPushMatrix();///NOW2 長出下手臂
                glTranslatef(-0.18, 0, 0);///(3)掛到肘上
                glRotatef(angle[1], 0,0,1);///(2)轉動 ///NOW
                glTranslatef(-0.18, 0, 0);///(1)改變旋轉中心,放到中心

                glColor3f(1,0,0);///red
                glutSolidTeapot( 0.2 );///left lower arm

            glPopMatrix();
        glPopMatrix();
    glPopMatrix();

    glutSwapBuffers();
}
int oldX;///NOW
void mouse(int button, int state, int x, int y)///NOW
{
    oldX = x;///NOW
}
void motion(int x, int y)///NOW
{
    angle[1] += (x-oldX);///NOW
    oldX = x;///NOW
    display();///NOW
}
int main(int argc, char**argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
    ///glutInitWindowSize(600,600);///我們可以開很大的視窗
    glutCreateWindow("week 13 motion TRT angle file");
    glutMouseFunc(mouse);///NOW
    glutMotionFunc(motion);///NOW
    glutDisplayFunc(display);

    glutMainLoop();
}

做出 兩隻手 會動


加入很多東西


主要是加入可以跟鍵盤互動的程式

還有轉動角度的輸出
 

2019年5月10日 星期五

aaaaaa week12

一. 播放聲音

1.開啟codeblocks的貝殼專案
2.輸入程式碼後出現錯誤

3.要先去連結檔案

4.連結檔案後就能成功播放聲音了


二.  鋼琴

codeblocks 開啟glut專案  

加入聲音的程式碼


用鍵盤的功能加入撥放聲音 做出鋼琴的效果
三. 播放mp3檔

最前面要加入可以使用mp3的外掛

專案資料夾內要加入 CMP3_MCI.h的檔案


讀取mp3檔,播放mp3檔
就能播放mp3檔了



2019年5月3日 星期五

aaaaaa week11

先去下載freeglut windows

然後開啟glut專案

去老師給的網址下載程式碼 http://120.125.89.81/

先畫出一個茶壺

#include <GL/glut.h>
void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    glutSolidTeapot( 0.3 );

    glutSwapBuffers();
}
int main(int argc, char**argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH );
    glutCreateWindow("week11 TRT");

    glutDisplayFunc(display);

    glutMainLoop();
}



之後做一個在右肩上旋轉的紅色茶壺


#include <GL/glut.h>
float angle=0;///NOW
void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glColor3f(255,255,255);///白色的
    glutSolidTeapot( 0.3 );///身體
    glPushMatrix();///右邊手臂
        glTranslatef(0.3, 0, 0);///(3) 掛在身體的右肩
        glRotatef(angle, 0,0,1);///(2) 旋轉
        glTranslatef(0.15, 0,0);///(1) 把茶壼柄,移動到畫面的中心,當旋轉軸

        glColor3f(1,0,0);///紅色的
        glutSolidTeapot( 0.15 );///右手臂
    glPopMatrix();

    glutSwapBuffers();
    angle++;///NOW
}
int main(int argc, char**argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH );
    glutCreateWindow("week11 TRT");
    glutIdleFunc(display);///NOW
    glutDisplayFunc(display);

    glutMainLoop();
}




接下來再紅色茶壺上再裝一個紅色茶壺

#include <GL/glut.h>
float angle=0;///NOW
void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glColor3f(255,255,255);///白色的
    glutSolidTeapot( 0.3 );///身體
    glPushMatrix();///右邊手臂
        glTranslatef(0.2, 0, 0);///(3) 掛在身體的右肩
        glRotatef(angle, 0,0,1);///(2) 旋轉
        glTranslatef(0.15, 0,0);///(1) 把茶壼柄,移動到畫面的中心,當旋轉軸

        glColor3f(1,0,0);///紅色的
        glutSolidTeapot( 0.15 );///右手臂

        glPushMatrix();///NOW2
            glTranslatef(0.2, 0, 0);///(3) 掛在身體的右肘///NOW2
            glRotatef(angle, 0,0,1);///(2) 旋轉///NOW2
            glTranslatef(0.15, 0,0);///(1) 把茶壼柄,移動到畫面的中心,當旋轉軸///NOW2

            glColor3f(1,0,0);///紅色的///NOW2
            glutSolidTeapot( 0.15 );///右下手臂///NOW2
        glPopMatrix();///NOW2

    glPopMatrix();

    glutSwapBuffers();
    angle++;///NOW
}
int main(int argc, char**argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH );
    glutCreateWindow("week11 TRT");
    glutIdleFunc(display);///NOW
    glutDisplayFunc(display);

    glutMainLoop();
}

到這裡是兩層的trt

之後把旋轉的方式改成用滑鼠轉

#include <GL/glut.h>
float angle=0;///NOW
void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glColor3f(255,255,255);///白色的
    glutSolidTeapot( 0.3 );///身體
    glPushMatrix();///右邊手臂
        glTranslatef(0.2, 0, 0);///(3) 掛在身體的右肩
        glRotatef(angle, 0,0,1);///(2) 旋轉
        glTranslatef(0.15, 0,0);///(1) 把茶壼柄,移動到畫面的中心,當旋轉軸

        glColor3f(1,0,0);///紅色的
        glutSolidTeapot( 0.15 );///右手臂

        glPushMatrix();///NOW2
            glTranslatef(0.2, 0, 0);///(3) 掛在身體的右肘///NOW2
            glRotatef(angle, 0,0,1);///(2) 旋轉///NOW2
            glTranslatef(0.15, 0,0);///(1) 把茶壼柄,移動到畫面的中心,當旋轉軸///NOW2

            glColor3f(1,0,0);///紅色的///NOW2
            glutSolidTeapot( 0.15 );///右下手臂///NOW2
        glPopMatrix();///NOW2

    glPopMatrix();

    glutSwapBuffers();
    //angle++;///NOW

}
void motion(int x, int y)
{
    angle = x;
    display();
}
int main(int argc, char**argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH );
    glutCreateWindow("week11 TRT");
    glutIdleFunc(display);///NOW
    glutDisplayFunc(display);
    glutMotionFunc(motion);

    glutMainLoop();
}



將右手臂的程式碼複製

trt的方向改成-的  就可以做出左手臂了

#include <GL/glut.h>
float angle=0;///NOW
void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glColor3f(255,255,255);///白色的
    glutSolidTeapot( 0.3 );///身體
    glPushMatrix();///右邊手臂
        glTranslatef(0.2, 0, 0);///(3) 掛在身體的右肩
        glRotatef(angle, 0,0,1);///(2) 旋轉
        glTranslatef(0.15, 0,0);///(1) 把茶壼柄,移動到畫面的中心,當旋轉軸

        glColor3f(1,0,0);///紅色的
        glutSolidTeapot( 0.15 );///右手臂

        glPushMatrix();///NOW2
            glTranslatef(0.2, 0, 0);///(3) 掛在身體的右肘///NOW2
            glRotatef(angle, 0,0,1);///(2) 旋轉///NOW2
            glTranslatef(0.15, 0,0);///(1) 把茶壼柄,移動到畫面的中心,當旋轉軸///NOW2

            glColor3f(1,0,0);///紅色的///NOW2
            glutSolidTeapot( 0.15 );///右下手臂///NOW2
        glPopMatrix();///NOW2


         glPushMatrix();///左邊手臂
        glTranslatef(-0.2, 0, 0);///(3) 掛在身體的左肩
        glRotatef(angle, 0,0,1);///(2) 旋轉
        glTranslatef(-0.15, 0,0);///(1) 把茶壼柄,移動到畫面的中心,當旋轉軸

        glColor3f(1,0,0);///紅色的
        glutSolidTeapot( 0.15 );///左手臂

        glPushMatrix();///NOW2
            glTranslatef(-0.2, 0, 0);///(3) 掛在身體的右肘///NOW2
            glRotatef(angle, 0,0,1);///(2) 旋轉///NOW2
            glTranslatef(-0.15, 0,0);///(1) 把茶壼柄,移動到畫面的中心,當旋轉軸///NOW2

            glColor3f(1,0,0);///紅色的///NOW2
            glutSolidTeapot( 0.15 );///右下手臂///NOW2
        glPopMatrix();///NOW2


    glutSwapBuffers();
    //angle++;///NOW

}
void motion(int x, int y)
{
    angle = x;
    display();
}
int main(int argc, char**argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH );
    glutCreateWindow("week11 TRT");
    glutIdleFunc(display);///NOW
    glutDisplayFunc(display);
    glutMotionFunc(motion);

    glutMainLoop();
}

#include <GL/glut.h>
float angle=0;///NOW
void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glColor3f(255,255,255);///白色的
    glutSolidTeapot( 0.3 );///身體
    glPushMatrix();///右邊手臂
        glTranslatef(0.2, 0, 0);///(3) 掛在身體的右肩
        glRotatef(angle, 0,0,1);///(2) 旋轉
        glTranslatef(0.15, 0,0);///(1) 把茶壼柄,移動到畫面的中心,當旋轉軸

        glColor3f(1,0,0);///紅色的
        glutSolidTeapot( 0.15 );///右手臂

        glPushMatrix();///NOW2
            glTranslatef(0.2, 0, 0);///(3) 掛在身體的右肘///NOW2
            glRotatef(angle, 0,0,1);///(2) 旋轉///NOW2
            glTranslatef(0.15, 0,0);///(1) 把茶壼柄,移動到畫面的中心,當旋轉軸///NOW2

            glColor3f(1,0,0);///紅色的///NOW2
            glutSolidTeapot( 0.15 );///右下手臂///NOW2
        glPopMatrix();///NOW2


         glPushMatrix();///左邊手臂
        glTranslatef(-0.2, 0, 0);///(3) 掛在身體的左肩
        glRotatef(-angle, 0,0,1);///(2) 旋轉
        glTranslatef(-0.15, 0,0);///(1) 把茶壼柄,移動到畫面的中心,當旋轉軸

        glColor3f(1,0,0);///紅色的
        glutSolidTeapot( 0.15 );///左手臂

        glPushMatrix();///NOW2
            glTranslatef(-0.2, 0, 0);///(3) 掛在身體的右肘///NOW2
            glRotatef(-angle, 0,0,1);///(2) 旋轉///NOW2
            glTranslatef(-0.15, 0,0);///(1) 把茶壼柄,移動到畫面的中心,當旋轉軸///NOW2

            glColor3f(1,0,0);///紅色的///NOW2
            glutSolidTeapot( 0.15 );///右下手臂///NOW2
        glPopMatrix();///NOW2


    glutSwapBuffers();
    //angle++;///NOW

}
int oldX, oldY;
void motion(int x, int y)
{
    angle += (x-oldX);
    oldX=x;
    display();
}
void mouse(int button, int state, int x, int y)
{
    oldX= x;
}
int main(int argc, char**argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH );
    glutCreateWindow("week11 TRT");
    glutIdleFunc(display);///NOW
    glutDisplayFunc(display);
    glutMotionFunc(motion);

    glutMainLoop();
}

2019年4月26日 星期五

aaaaaa Week10

一:練習 旋轉 移動 縮放

去http://www.cmlab.csie.ntu.edu.tw/~jsyeh/3dcg10/ 下載data/win32/glut.dll

開啟 transformation

公轉





自轉

老師你說什麼我根本不懂,你那個圖我是一點都沒明白



二 TRT旋轉

去下載freeglut

lib 改 freeglut32.a

開啟glut專案 ,以前都做了很多次了

打程式

把椎子插在茶壺的嘴巴上

2019年4月12日 星期五

aaaaaa week07



1.去http://www.cmlab.csie.ntu.edu.tw/~jsyeh/3dcg10/ 下載 win32/data/glut32.dll

2.開啟texture




到 https://sourceforge.net/projects/opencvlibrary/files/opencv-win/2.1/ 下載opencv 2.1

安裝的時候選中間的add path

之後code blocks 選擇貝殼專案

改程式的build option


compile 加入 c:\opencv2.1\include



linker 加入 c:\opencv2.1\lib

linker setting  加入3個所需的dll檔
加入程式及所需的圖片檔
                          
結束

      


2019年3月29日 星期五

aaaaaa week06

打光復習

1.去http://www.cmlab.csie.ntu.edu.tw/~jsyeh/3dcg10/下載 data/source/windows/glut32.dll

開起來試試看

之後去下載freeglut windows

用上週教的程式碼

讀入3d模組

先加入新的程式碼

#include "glm.h"
GLMmodel* pmodel = NULL;

還有把茶壺那邊的資料改成要讀入的檔案

if (!pmodel) {
pmodel = glmReadOBJ("data/porsche.obj");
if (!pmodel) exit(0);
glmUnitize(pmodel);
glmFacetNormals(pmodel);
glmVertexNormals(pmodel, 90.0);
    }

    glmDraw(pmodel, GLM_SMOOTH | GLM_MATERIAL);


之後在專案資料夾內加入 glm.h以及glm.c 並把glm.c改成glm.cpp



 然後再codeblocks裡把 glm.cpp加入專案內

做到這裡  可以開啟程式了,不過會閃退,所以要做下面一步

把data資料放入freeglut 的bin資料夾內


完成了,成功讀入車的模型!!


2019年3月22日 星期五

aaaaaa week05

1. light material
一樣先去http://www.cmlab.csie.ntu.edu.tw/~jsyeh/3dcg10/下載
windows/data/glut32.dll


2.開啟light material

上方按右鍵可以更換模型



下方按右鍵可以更換顏色

GL_float light_pos[]={ x,y,z,1}
可以調整光的位置 , 前三個位置分別對應xyz


2.做立體的茶壺

先下載freeglut

開啟codeblocks的 glut專案

複製程式碼到notepad++

把茶壺的程式碼+到codeblocks

複製light相關的程式碼+到茶壺裡

產生立體的茶壺

今日的程式碼
#include <GL/glut.h>
const GLfloat light_ambient[]  = { 0.0f, 0.0f, 0.0f, 1.0f };
const GLfloat light_diffuse[]  = { 1.0f, 1.0f, 1.0f, 1.0f };
const GLfloat light_specular[] = { 1.0f, 1.0f, 1.0f, 1.0f };
const GLfloat light_position[] = { 2.0f, 5.0f, -5.0f, 0.0f };

const GLfloat mat_ambient[]    = { 0.7f, 0.7f, 0.7f, 1.0f };
const GLfloat mat_diffuse[]    = { 0.8f, 0.8f, 0.8f, 1.0f };
const GLfloat mat_specular[]   = { 1.0f, 1.0f, 1.0f, 1.0f };
const GLfloat high_shininess[] = { 100.0f };
void display(){

    glColor3f( 100/255.0 , 50/255.0 ,2000/255.0 ); //上色
    glPushMatrix();
    glTranslatef(0.3,0.3,0);
    glutSolidTeapot(0.3);
    glPopMatrix();
    glutSwapBuffers();
}
int main(int argc, char**argv){
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("Week05_03163625");
    glutDisplayFunc(display);
  glEnable(GL_LIGHT0);
    glEnable(GL_NORMALIZE);
    glEnable(GL_COLOR_MATERIAL);
    glEnable(GL_LIGHTING);

    glLightfv(GL_LIGHT0, GL_AMBIENT,  light_ambient);
    glLightfv(GL_LIGHT0, GL_DIFFUSE,  light_diffuse);
    glLightfv(GL_LIGHT0, GL_SPECULAR, light_specular);
    glLightfv(GL_LIGHT0, GL_POSITION, light_position);

    glMaterialfv(GL_FRONT, GL_AMBIENT,   mat_ambient);
    glMaterialfv(GL_FRONT, GL_DIFFUSE,   mat_diffuse);
    glMaterialfv(GL_FRONT, GL_SPECULAR,  mat_specular);
    glMaterialfv(GL_FRONT, GL_SHININESS, high_shininess);

    glutMainLoop();
}



完成圖

更改程式碼
+入 float angel=0;等等  讓茶壺自動旋轉