2021年3月3日 星期三

yun_電腦圖學筆記week02

 今天剛開始上課按照上週老師教的打開opengl和glut並反白兩段程式碼

opengl反白86-92

glBegin(GL_TRIANGLES); glColor3f(1.0f, 0.0f, 0.0f); glVertex2f(0.0f, 1.0f); glColor3f(0.0f, 1.0f, 0.0f); glVertex2f(0.87f, -0.5f); glColor3f(0.0f, 0.0f, 1.0f); glVertex2f(-0.87f, -0.5f); glEnd();


glut反白138-143

int main(int argc, char *argv[]) { glutInit(&argc, argv); glutInitWindowSize(640,480); glutInitWindowPosition(10,10);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);

接著先處理glut的程式碼,第一步先將程式碼縮減,縮減到main函式剩下五行,display剩下兩行
接著在display內輸入    glutSolidTeapot(0.3); 製作出一個茶壺

#include <GL/glut.h>//使用glut外掛 static void display(void) { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);//清背景 glutSolidTeapot(0.3);//製作出一個茶壺 glutSwapBuffers();//更新畫面 } int main(int argc, char *argv[])//main函式 { glutInit(&argc, argv);//(1)Inin初始化glut glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);//(2)Init初始化display的功能,RGB表示顏色,DOUBLE表示2倍放大,DEPTH表示3D深度 glutCreateWindow("嗨 我是08160093");//(3)建立glut視窗,括號內可隨喜好自行填寫名稱 glutDisplayFunc(display);//(4)準備display函式 glutMainLoop();//(5)主要函式
}
可愛的茶壺就這樣出來了!

另外老師今天講解了main函式裡面argc,argv的意義,並用codeblocks示範

#include <stdio.h> int main(int argc,char*argv[]) { printf("有幾個參數argc: %d\n",argc); for(int i=0;i<argc;i++) { printf("參數%d: %s\n",i,argv[i]); } }

   在display程式碼內加入一行"glColor3f(1,0,0);"表示更新茶壺的顏色
加入後,茶壺即變更為紅色

#include <GL/glut.h> static void display(void) { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glBegin(GL_TRIANGLES); glColor3f(1.0f, 0.0f, 0.0f); glVertex2f(0.0f, 1.0f); glColor3f(0.0f, 1.0f, 0.0f); glVertex2f(0.87f, -0.5f); glColor3f(0.0f, 0.0f, 1.0f); glVertex2f(-0.87f, -0.5f); glEnd(); glColor3f(0,1,1); glutSolidTeapot(0.3); glutSwapBuffers(); } int main(int argc, char *argv[]) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH); glutCreateWindow("嗨 我是08160093"); glutDisplayFunc(display); glutMainLoop(); }









將opengl反白的那段程式碼複製過來,那段程式碼主要代表著三角形,而括號內的前中右代表著紅、綠、藍三個顏色。




接著將glBegin(GL_TRIANGLES);改成glBegin(GL_LINE_LOOP);


這樣就完成了三角形的三條線
參照網路圖片


#include <GL/glut.h> #include<math.h> static void display(void) { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glBegin(GL_POLYGON); glColor3f(0.0f, 0.0f, 1.0f); for(float angle=0;angle<3.14159265358979*2;angle+=0.01){ glVertex2f(0.5*cos(angle),0.5*sin(angle)); } glEnd(); glColor3f(0.5,1,0.2); glutSolidTeapot(0.3); glutSwapBuffers(); } int main(int argc, char *argv[]) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH); glutCreateWindow("嗨 我是08160093"); glutDisplayFunc(display); glutMainLoop(); }









將顏色三行刪除並加入for迴圈










glBegin(GL_POLYGON); glColor3f(0.0f, 0.0f, 1.0f); for(float angle=0;angle<3.14159265358979*2;angle+=0.01){ glVertex2f(0.5*cos(angle),0.5*sin(angle)); }

這幾行程式碼包含著圓周率,代表可以在背景畫出一個圓並加入指定的顏色







沒有留言:

張貼留言

距地表面160 Week11

 #include "glm.h" GLMmodel* pmodel = NULL; void drawmodel(void) {     if (!pmodel) { pmodel = glmReadOBJ("data/porsche.obj...