一、複習上週上課的兩個主要內容OpenGL和GLUT
二、無論是OpenGL畫一個彩色三角形還是GLUT畫的六個圖案都需要很多行的代碼
![]() |
| GLUT |
![]() |
| OpenGL |
因此今天上課老師教我們用更少的程式碼來完成同樣的工作
以下開始寫程式
(1)打開codeblock并創建一個GLUT project,創建過程詳細見week 01
(2)將程式碼全部刪除開始自己準備
在開始寫代碼之前我們需要對codeblock的內部文件進行一些準備工作
(1)找到我們之前下載過得freeglut文件夾,這裡我已經放在codeblock文件夾中
根據路徑打開codeblock文件夾找到freeglut文件夾
(2)打開文件夾freeglut中的bin文件夾看到一個叫做freeglut.dll的拓展文件並且複製
(3)打開我們剛開創建的GLUT project的文件夾,找到bin->debug,將freeglut.dll粘貼進去
(4)回到剛才打開的codeblock
首先輸入一個GLUT的標頭檔,這是一個以前從來沒有接觸過的標頭檔,從我們剛才的擴展文件中的調用函數,是比較高級的GLUT(OpenGL User Toolkit)
(5)首先我們構建我們的主程式
*這裡我們在main()中加入的程式將作業系統的參數調用進來是一個很高級的寫法,同時也可以寫成 int main(int argc, char *argv[])
(6)那麼接下來我們測試一下系統的參數,使用系統自己的小黑視窗(win+R開啟,輸入cmd)
我們構建一個程式:
#include <stdio.h>
#include <GT/glut.h> //OpenGL User Toolkit
int main(int argc, char **argv) //把作業系統的參數塞進來
{
for(int i=0;i<argc;i++){ //有幾個參數
printf("argv[%d]:%s\n",i,argv[i]); //參數字串的值
}
}
![]() |
| 測試結果會如圖類似,由於拿的老師的圖來做的 |
程式碼如下:
#include <stdio.h>
#include <GL/glut.h>
void display()
{
glClear(GL_COLOR_BUFFER_BIT);//6、清除畫面
glutSolidTeapot(0.3); //7、做一個大小為0.3的茶壺
glutSwapBuffers(); //8、交換double buffers來顯示畫出來的畫面
}
int main(int argc, char **argv)
{
glutInit(&argc,argv); //1、初始化Initialize的glut參數設定
glutInitDisplayMode(GLUT_DOUBLE);
//2、顯示模式是double buffers
glutCreateWindow("Week02 Hello World Triangle");
//3、建立視窗
glutDisplayFunc(display); //4、顯示函式display()用來畫圖的
glutMainLoop(); //5,、主要的廻圈,用來控制程式
}
![]() |
| 程式執行的結果如圖所示 |
1)我們只需要在void display()函式中添加一行glColor3d(1,0,0);就可以讓茶 壺變成紅色,其中3表示三個參數,d表示double雙精度浮點數也可以使用f單 精度浮點數,括號中的數字範圍是0-1之間分別是紅色、綠色、和藍色,當然 我們也可以用RGB的數字/255.0來得到0-1之間的值
2)我們也可以用glColor3ub(255,255,0)來直接用RGB使茶壺變色
3)茶壺可以變色我們的背景當然也可以,我們同樣在display()裡面加入一行 程式碼即可glClearColor(R/255.0 , G/255.0 , B/255.0 , 1);
#include <stdio.h>
#include <GL/glut.h>
void display()
{
glClearColor(68/255.0 , 178/255.0 , 134/255.0 , 1);//讓背景變成綠色
glClear(GL_COLOR_BUFFER_BIT);//6、清除畫面
glColor3d(1,1,0); //讓茶壺變成黃色
glutSolidTeapot(0.3); //7、做一個大小為0.3的茶壺
glutSwapBuffers(); //8、交換double buffers來顯示畫出來的畫面
}
int main(int argc, char **argv)
{
glutInit(&argc,argv); //1、初始化Initialize的glut參數設定
glutInitDisplayMode(GLUT_DOUBLE);
//2、顯示模式是double buffers
glutCreateWindow("Week02 Hello World Triangle");
//3、建立視窗
glutDisplayFunc(display); //4、顯示函式display()用來畫圖的
glutMainLoop(); //5,、主要的廻圈,用來控制程式
}
三、老師還給我們展示了製作平昌冬奧會會標的第一步
#include <GL/glut.h>
void display()
{
glClearColor(68/255.0 , 278/255.0 , 134/255.0 , 1);
glClear(GL_COLOR_BUFFER_BIT);
glBegin(GL_POLYGON);
glColor3ub(51,97,161);
glVertex2f((137-400)/400.0, -(467-400)/400.0);
glVertex2f((177-400)/400.0, -(194-400)/400.0);
glVertex2f((243-400)/400.0, -(245-400)/400.0);
glEnd();
glutSwapBuffers();
}
int main(int argc,char **argv)
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("Week02 Hello World Triangle");
glutDisplayFunc(display);
glutMainLoop();
}












沒有留言:
張貼留言