




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、目錄實驗一:OpenGL基礎知識1實驗二 OpenGL中的建模與變換2實驗三 OpenGL中的光照5實驗四 OpenGL中的拾取8實驗五 OpenGL中的紋理映射1127實驗一:OpenGL基礎知識 一、實驗目的 1、建立Windows系統下的OpenGL實驗框架。 2、學習理解OpenGL工作流程。二、實驗環境 硬件:每個學生需配備計算機一臺。 軟件:Visual C+; 三、實驗內容 1、建立非控制臺的Windows程序框架。 2、建立OpenGL框架。 3、建立OpenGL框架的類文件。 4、完善Windows框架。&
2、#160;5、理解程序間的相互關系。 四、實驗要求1、學習教材第2章的內容。2、理解教材中相關實例的代碼,按要求添加到適當的地方,調試并通過運行。3、運行結果應該與教材中的相關實例相符。4、編譯第2章的框架代碼,修改背景色、窗口標題。五、程序設計提示(略)六、報告要求1認真書寫實驗報告,字跡清晰,格式規范。報告中應寫清姓名、學號、實驗日期、實驗題目、實驗目的、實驗原理。2報告中應書寫主要源程序,且源程序中要有注釋。3報告中應包含運行結果及結果分析。如調試通過并得到預期的效果,請注明通過并粘貼運行效果圖;如未調試通過或結果不正確,試分析原因。4報告最后包含實驗總結和體會。實驗二 Ope
3、nGL中的建模與變換一、實驗目的1學習配置OpenGL環境。2掌握在OpenGL中指定幾何模型的方法。3. 掌握OpenGL中的透視投影和正投影的設置方法,學會診斷投影問題導致的顯示異常。二、實驗環境 硬件:每個學生需配備計算機一臺。 軟件:Visual C+; 三、實驗內容1建立OpenGL編程環境(注:Windows自帶gl和glu,還需要安裝glut庫文件。)(a)查看Windows自帶的OpenGL文件。在文件夾c:windowssystem32下查看是否存在文件opengl32.dll和glu32.dll;在Visual Studio的安裝目錄Vc7PlatformSDKInclud
4、egl下查看是否存在gl.h和glu.h;在Vc7PlatformSDKLib下是否存在opengl32.lib和glu32.lib。(b)安裝glut庫。將文件glut.h復制到Visual Studio的安裝目錄 Vc7PlatformSDKIncludegl下;將文件glut32.lib復制到Vc7PlatformSDKLib下;將文件glut32.dll復制到c:windowssystem32下。2OpenGL幾何建模(a)建立基本的幾何圖元,指定圖元的顏色,對圖元進行平移、旋轉、縮放變換。基本幾何圖元包括:GL_LINES(線)、GL_LINE_STRIP(線帶)、GL_LINE_L
5、OOP(線環)、GL_TRIANGLES(三角形)、GL_TRIANGLE_STRIP(三角形帶)、GL_TRIANGLE_FAN(三角形扇)、GL_QUADS(四邊形)、GL_QUAD_STRIP(四邊形帶)、GL_POLYGON(多邊形)。(b) 設置合適的投影參數,分別用透視投影和正投影顯示步驟(a)中指定的幾何圖元。(c) 每按下鼠標左鍵一次,模型向右旋轉一定角度。(d) 按下ESC鍵,退出程序。四、程序設計提示1. main函數功能:創建窗口;注冊回調函數;主循環。int main(int argc, char* argv)glutInit(&argc, argv);glut
6、InitDisplayMode (GLUT_SINGLE | GLUT_RGB);glutInitWindowSize (500, 500); glutInitWindowPosition (100, 100);glutCreateWindow(”OpenGL中的建模與變換”);init ();glutDisplayFunc(display); glutReshapeFunc(reshape);glutKeyboardFunc(keyboard);glutMouseFunc(mouseFunc);glutMainLoop();return 0;2. 初始化函數:功能:設置清除所用的顏色;指定著
7、色模型。void init(void) 3. 鍵盤響應函數:功能:按下ESC鍵時退出程序。void keyboard(unsigned char key, int x, int y)4. 鼠標響應函數功能:按下鼠標左鍵時,改變旋轉角度(或平移量、縮放系數)。void mouseFunc(int button, int state, int x, int y)5. 顯示函數:功能:指定幾何模型;指定顏色;進行模型變換。void display(void)/清除顏色緩存/指定顏色/模型變換/指定模型/馬上執行6. reshape函數功能:設置視口;窗口大小改變時,改變視域體,使窗口的寬高比與視域體
8、的寬高比保持一致。void reshape (int w, int h)7. 包含頭文件,定義全局變量#include<stdlib.h>#include<GL/glut.h>GLdoubleangle = 0.0;GLdoubletranslation = 0.0;GLdoublescale = 1.0;五、思考題1在reshape函數中,窗口改變時如果不同時改變視域體的寬高比,會產生什么效果?2近裁剪面與物體相交時,會產生什么效果?六、報告要求1認真書寫實驗報告,字跡清晰,格式規范。報告中應寫清姓名、學號、實驗日期、實驗題目、實驗目的、實驗原理。2報告中應書寫主要源
9、程序,且源程序中要有注釋。3報告中應包含運行結果及結果分析。如調試通過并得到預期的效果,請注明通過并粘貼運行效果圖;如未調試通過或結果不正確,試分析原因。4報告最后包含實驗總結和體會。實驗三 OpenGL中的光照一、實驗目的1理解光照模型。2掌握OpenGL中的光照編程方法。3. 學會診斷OpenGL中的光照效果異常。二、實驗環境 硬件:每個學生需配備計算機一臺。 軟件:Windows操作系統+Visual C+; 三、實驗內容1建模 利用glut函數指定兩個球體模型,它們一左一右并列放置在原點兩側,設置合適的視域體進行觀察。2定義光源屬性定義兩個光源,分別設置它們的環境光、漫反射光和鏡面反射
10、光分量,設置兩個光源的位置分別位于左側球體的左前方和右側球體的右前方;左側的光源為紅色,右側的光源為綠色。3. 定義球體的材質4. 顯示球體時,讓左邊的光源只照亮左邊的球體,右邊的光源只照亮右邊的球體。5. 按下ESC鍵,退出程序。四、程序設計提示1. main函數功能:創建窗口;注冊回調函數;主循環。int main(int argc, char* argv)glutInit(&argc, argv);glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH);glutInitWindowSize (500, 500); glu
11、tInitWindowPosition (100, 100);glutCreateWindow (“OpenGL中的光照”);init ();glutDisplayFunc(display); glutReshapeFunc(reshape);glutKeyboardFunc(keyboard);glutMainLoop();return 0;2. 初始化函數:功能:設置清除所用的顏色;指定著色模型;設置材質;初始化光源參數;打開光照;打開深度測試。void init(void) 3. 鍵盤響應函數:功能:按下ESC鍵時退出程序。void keyboard(unsigned char key,
12、 int x, int y)4.顯示函數:功能:指定幾何模型;指定顏色;進行模型變換。void display(void)/清除顏色緩存/打開燈光0,關閉燈光1/向左平移/指定左側球體/打開燈光1,關閉燈光0/向右平移/指定右側球體/馬上執行5. reshape函數功能:設置視口;窗口大小改變時,改變視域體,使窗口的寬高比與視域體的寬高比保持一致。void reshape (int w, int h)6. 包含頭文件#include<stdlib.h>#include<GL/glut.h>五、思考題1若定義三個光源,光源0和光源1照在左側球體上,光源1和光源2照在右側球
13、體上,如何實現?2在OpenGL中,要使光照效果正常,需要指定模型的法向量。在本實驗中利用glut函數顯示球體時,沒有指定球體的法向量,你在實驗中是否得到了正確的光照效果?請分析原因。六、報告要求1認真書寫實驗報告,字跡清晰,格式規范。報告中應寫清姓名、學號、實驗日期、實驗題目、實驗目的、實驗原理。2報告中應書寫主要源程序,且源程序中要有注釋。3報告中應包含運行結果及結果分析。如調試通過并得到預期的效果,請注明通過并粘貼運行效果圖;如未調試通過或結果不正確,試分析原因。4報告最后包含實驗總結和體會。實驗四 OpenGL中的拾取一、實驗目的1理解OpenGL中的交互式編程方法。2掌握OpenGL
14、中拾取的實現。二、實驗環境 硬件:每個學生需配備計算機一臺。 軟件:Windows操作系統+Visual C+。 三、實驗內容1建模 利用glut函數定義兩個球體模型,它們一左一右并列放置在原點兩側,設置合適的視域體進行觀察。2拾取 將拾取函數作為鼠標響應的回調函數。在拾取函數中,建立拾取矩陣,在鼠標附近3×3的區域內選擇對象,在鼠標左鍵按下時,判斷哪一個球體被選中,還是都未被選中,并將選擇緩存中的內容打印到屏幕上。3. 設置顏色左邊球體未被選中時顯示為紅色,右邊球體未被選中時顯示為綠色,當其中任意一個被選中時,則以白色顯示被選中的球體。4. 按下ESC鍵,退出程序。四、程序設計提示
15、1. main函數功能:創建窗口;注冊回調函數;主循環。int main(int argc, char *argv)glutInit(&argc, argv);glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH);glutInitWindowSize (500, 500);glutInitWindowPosition (100, 100);glutCreateWindow(“OpenGL中的拾取”);init();glutReshapeFunc(reshape);glutDisplayFunc(display);glutMou
16、seFunc(pickRects);glutKeyboardFunc(keyboard);glutMainLoop();return 0; 2. 初始化函數:功能:設置清除所用的顏色;打開深度測試;指定著色模型。void init(void) 3.鼠標響應函數功能:按下鼠標左鍵時,在鼠標附近3×3的區域內進行拾取。如果選中左邊的球體則select = 1,如果選中右邊的球體則令select = 2,如果兩個球體都未被選中,則select = 0。void pickRects (int button, int state, int x, int y)4. 顯示函數:功能:指定幾何模型;
17、指定顏色;如果當前處于“選擇模式”,則設置合適的名稱棧。void display(void)5. reshape函數功能:設置視口;設置視域體。void reshape (int w, int h)6. 鍵盤響應函數功能:按下ESC鍵時退出程序。void keyboard(unsigned char key, int x, int y)7. 包含頭文件,定義全局變量#include <stdlib.h>#include <stdio.h>#include <GL/glut.h>Glint select = 0; 其中select用來標記選中哪一個物體,選中左
18、邊的球體時select = 1,選中右邊的球體時select = 2,當兩者都未被選中時select = 0。五、思考題1如果在拾取時有多個物體被選中,怎樣判斷哪個物體處于最上面?2一個命中記錄中的最小和最大深度值代表什么意義,怎樣取出它們的值?六、報告要求1認真書寫實驗報告,字跡清晰,格式規范。報告中應寫清姓名、學號、實驗日期、實驗題目、實驗目的、實驗原理。2報告中應書寫主要源程序,且源程序中要有注釋。3報告中應包含運行結果及結果分析。如調試通過并得到預期的效果,請注明通過并粘貼運行效果圖;如未調試通過或結果不正確,試分析原因。4報告最后包含實驗總結和體會。實驗五 OpenGL中的紋理映射一
19、、實驗目的1理解紋理映射的基本原理。2掌握OpenGL中定義紋理映射的方法。3. 學會診斷OpenGL中的紋理映射出現的異常。二、實驗環境 硬件:每個學生需配備計算機一臺。 軟件:Windows操作系統+Visual C+; 三、實驗內容1構造柵格圖像 建立一幅64×64像素的RGBA模式的圖像,將R、G、B、A四個分量的值保存在一個64×64×4的三維數組里,其中A為通道,圖像如圖1所示。 圖1 圖22建模利用glBegin(GL_QUADS)函數定義兩個矩形,一左一右放置,并設置合適的視域體進行觀察。3. 將步驟1所生成的圖像作為紋理,映射到步驟2所定義的兩個
20、矩形上,指定合適的紋理坐標,使得左邊的矩形繪制得到的圖像與圖1一致,右邊的矩形繪制結果如圖2所示。 4. 按下ESC鍵,退出程序。四、程序設計提示1. main函數功能:創建窗口;注冊回調函數;主循環。int main(int argc, char* argv)glutInit(&argc, argv);glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH);glutInitWindowSize(500, 500);glutInitWindowPosition(100, 100);glutCreateWindow("O
21、penGL中的紋理映射");init();glutReshapeFunc(reshape);glutDisplayFunc(display);glutKeyboardFunc (keyboard);glutMainLoop();return 0; 2. 初始化函數:功能:設置清除所用的顏色;指定著色模型;打開深度測試;構造柵格圖像;創建紋理;打開紋理映射。void init(void) 3. 鍵盤響應函數:功能:按下ESC鍵時退出程序。void keyboard(unsigned char key, int x, int y)4. 顯示函數:功能:定義幾何模型;綁定紋理;指定紋理坐標
22、和幾何坐標。void display(void)/清除顏色緩存和深度緩存/綁定紋理/指定模型頂點的紋理坐標和幾何坐標/馬上執行6. reshape函數功能:設置視口;窗口大小改變時,改變視域體,使窗口的寬高比與視域體的寬高比保持一致。void reshape (int w, int h)7. 包含頭文件,定義全局變量#define ImageWidth 64#define ImageHeight 64static GLubyte ImageImageHeightImageWidth4;static GLuint texName;其中,ImageWidth為圖像寬度,ImageHeight 為圖
23、像高度,Image為圖像數據,texName為紋理名稱。五、思考題如何給不同的物體映射不同的紋理圖像?六、報告要求1認真書寫實驗報告,字跡清晰,格式規范。報告中應寫清姓名、學號、實驗日期、實驗題目、實驗目的、實驗原理。2報告中應書寫主要源程序,且源程序中要有注釋。3報告中應包含運行結果及結果分析。如調試通過并得到預期的效果,請注明通過并粘貼運行效果圖;如未調試通過或結果不正確,試分析原因。4報告最后包含實驗總結和體會。實驗2:代碼:#include<stdlib.h>#include<GL/glut.h>GLdoubleangle = 10.0;void display
24、()glClear(GL_COLOR_BUFFER_BIT);glMatrixMode(GL_MODELVIEW);glBegin(GL_POLYGON);glVertex2d(-0.5,-0.5);glVertex2d(-0.5,0.5);glVertex2d(0.5,0.5);glVertex2d(0.5,-0.5);glEnd();glFlush();void mouseFunc(int button,int state,int x,int y)/旋轉if(state=GLUT_DOWN && button=GLUT_LEFT_BUTTON)glMatrixMode(GL
25、_MODELVIEW);glLoadIdentity();if(angle<360)angle+=10;elseangle-=360;glRotatef(angle,1,1,2);glutPostRedisplay();void keyboard(unsigned char key,int x,int y)if(key=27)exit(-1);void init()glClearColor(0.0,0.0,0.0,0.0);glColor3f(1.0,0.0,0.0);void reshape(int w,int h)glViewport(0,0,w,h);int main(int ar
26、gc,char *argv)glutInit(&argc, argv);glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB);glutInitWindowSize (500, 500); glutInitWindowPosition (100, 100);glutCreateWindow("OpenGL中的建模與變換");init ();glutDisplayFunc(display); glutReshapeFunc(reshape);glutKeyboardFunc(keyboard);glutMouseFunc(mouseF
27、unc);glutMainLoop();return 0;截圖:點擊旋轉:體會:主要是我們在進行變換的時候,要注意glMatrixMode的設置,在進行投影變換的時候要設置為GL_PROJECTION,而當圖形變換的時候要設置為GL_MODELVIEW模式。實驗3:代碼:#include<stdlib.h>#include<GL/glut.h>void display()glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);glColor3f(1.0,1.0,1.0);glEnable(GL_LIGHT0);glDisable
28、(GL_LIGHT1);glMatrixMode(GL_MODELVIEW);glLoadIdentity();glTranslatef(-0.5,0,0);glutSolidSphere(0.3,20,22);glLoadIdentity();glDisable(GL_LIGHT0);glEnable(GL_LIGHT1);glTranslatef(0.5,0,0);glutSolidSphere(0.3,20,22);glutSwapBuffers();void keyboard(unsigned char key,int x,int y)if(key=27)exit(-1);void i
29、nit()glClearColor(0.0,0.0,0.0,0.0);GLfloat position04=-10,10,-10,1;GLfloat ambient04=1,0,0,1;glLightfv(GL_LIGHT0,GL_POSITION,position0);glLightfv(GL_LIGHT0,GL_AMBIENT,ambient0);GLfloat position14=10,10,-10,1;GLfloat ambient14=0,1,0,1;glLightfv(GL_LIGHT1,GL_POSITION,position1);glLightfv(GL_LIGHT1,GL_
30、AMBIENT,ambient1);glEnable(GL_LIGHTING);glEnable(GL_DEPTH_TEST);void reshape(int w,int h)glViewport(0,0,w,h);int main(int argc,char *argv)glutInit(&argc, argv);glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB);glutInitWindowSize (500, 500); glutInitWindowPosition (100, 100);glutCreateWindow("Ope
31、nGL中的光照");init ();glutDisplayFunc(display); glutReshapeFunc(reshape);glutKeyboardFunc(keyboard);glutMainLoop();return 0;截圖:體會:不知道為什么,右邊的球體好像沒有左邊的光線效果,這點查詢了很久還是不明白。實驗4:#include <iostream>#include<stdlib.h>#include<GL/glut.h>using namespace std;GLint select = 0;void drawObjects(
32、GLenum mode)if(mode = GL_SELECT)/繪制紅色的小球glPushName(1);if(select=1)/判斷選中的是什么顏色的球,然后采用什么顏色紅球還是白色的球glColor3f(1,1,1);elseglColor3f(1,0,0);glMatrixMode(GL_MODELVIEW);glLoadIdentity();glTranslatef(-0.5,0,0);glutSolidSphere(0.3,20,22);glPopName();glLoadIdentity();if(mode = GL_SELECT) /繪制綠色的小球glPushName(2);
33、if(select=2)/判斷選中的是什么顏色的球,然后采用什么顏色繪制glColor3f(1,1,1);elseglColor3f(0,1,0);glTranslatef(0.5,0,0);glutSolidSphere(0.3,20,22);glPopName();select=0;/顯示完后將select設置為0void display()glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);drawObjects(GL_RENDER);glutSwapBuffers();void keyboard(unsigned char key,int
34、x,int y)if(key=27)exit(-1);void init()glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);glClearColor(0.0,0.0,0.0,0.0);void reshape(int w,int h)glViewport(0,0,w,h);void draw(GLint hits,GLuint buffer)/這個是操作堆棧,判斷點擊的是什么顏色的球unsigned int i, j; GLuint name, *ptr; if(hits=0)cout<<"未點擊任何球體!"&l
35、t;<endl;elseptr = buffer;for(i=0;i<hits;i+)name=*ptr;ptr+=3;if(*ptr=1)cout<<"紅色球被點擊!"<<endl;select=1;elsecout<<"綠色球被點擊"<<endl;select=2;ptr+;drawObjects(GL_RENDER);/點擊完后設置球的顏色,重繪#define SIZE 512void pickRects(int button,int state,int x,int y)GLuint se
36、lectBufSIZE;GLint hits,viewport4;if(button=GLUT_LEFT_BUTTON && state=GLUT_DOWN)glGetIntegerv(GL_VIEWPORT,viewport);glSelectBuffer(SIZE,selectBuf);glRenderMode(GL_SELECT);glInitNames();glMatrixMode(GL_PROJECTION);glPushMatrix();glLoadIdentity();gluPickMatrix(GLdouble) x, (GLdouble) (viewport3
37、 - y),3.0, 3.0, viewport);drawObjects(GL_SELECT);/設置為選擇模式glMatrixMode(GL_PROJECTION);glPopMatrix();glFlush(); /繪制結束hits=glRenderMode(GL_RENDER);draw(hits,selectBuf);int main(int argc,char *argv)glutInit(&argc, argv);glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB);glutInitWindowSize (500, 500); glut
38、InitWindowPosition (100, 100);glutCreateWindow("OpenGL中的拾取");init ();glutDisplayFunc(display); glutMouseFunc(pickRects);glutReshapeFunc(reshape);glutKeyboardFunc(keyboard);glutMainLoop();return 0;截圖:初次顯示點擊紅球,然后點擊綠球,或是點擊黑色部分命令行顯示我們的操作體會:這個拾取過程我們控制select用來顯示兩個的球的顯示顏色,特別注意顯示完之后要將其select=0;同時在
39、對堆棧進行操作的時候要特別注意,不然就溢出啦。實驗5:代碼:#include<stdlib.h>#include<GL/glut.h>#define ImageWidth 64#define ImageHeight 64static GLubyte ImageImageHeightImageWidth3;static GLuint texName;void makeImage()int i,j,c;for(i=0;i<ImageWidth;i+)for(j=0;j<ImageHeight;j+)if(i%16<8)if(j%16<8)c=225;
40、elsec=0;elseif(j%16<8)c=0;elsec=225; Imageij0=(GLubyte)c; Imageij1=(GLubyte)c; Imageij2=(GLubyte)c;void display()glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);glColor3f(1.0,1.0,1.0); glMatrixMode(GL_MODELVIEW);glLoadIdentity();glTranslated(-0.5,0,0); glBegin(GL_QUADS);/繪制四邊形 /定義兩個帶紋理的平面: /指定紋理坐標和幾何坐標,每個紋理 /坐標與其后的幾何坐標對應glTexCoord2d(0,0);glVertex2d(-0.4,-0.4);glTexCoord2d(1,0);glVertex2d(-0.4,0.4);glTexCoord2d(1,1);glVertex2d(0.4,0.4);glTexCoord2d(0,1);glVertex2d(0.4,-0.4); glEnd(); glLoadIdentity();glTran
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 數據挖掘工程師人才引進與培養合同
- 城市交通規劃合同管理咨詢重點基礎知識點
- 地震工程地質重點基礎知識點
- 《RIP原理與配置》課件
- 2025院感知識專題培訓
- 正畸手術協議書
- 足療店合伙合同協議
- 進出口代銷合同協議
- 車輛保管借款合同協議
- 教育服務及教師聘任協議
- 2024浙江省高考歷史真題卷及答案
- 八年級道法與法治下冊試卷
- DL-T 1071-2023 電力大件運輸規范
- 三維圓柱擾流-卡門渦街數值仿真方法-詳細教程
- 2024年蘇州資產管理有限公司招聘筆試沖刺題(帶答案解析)
- 客車防雨密封性要求及試驗方法
- 2024春期國開電大專科《思想道德與法治》在線形考(專題檢測一至七)試題及答案
- 市場消防安全制度
- 2023-2024學年蘇州市振華中學中考沖刺卷數學試題含解析
- 牛津3000核心詞匯表注釋加音標1-4 完整版
- 某水電廠水工管理制度匯編
評論
0/150
提交評論