今天剛開始上課按照上週老師教的打開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);
接著先處理glut的程式碼,第一步先將程式碼縮減,縮減到main函式剩下五行,display剩下兩行
#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]);
}
}
加入後,茶壺即變更為紅色
#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反白的那段程式碼複製過來,那段程式碼主要代表著三角形,而括號內的前中右代表著紅、綠、藍三個顏色。
參照網路圖片
#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));
}
這幾行程式碼包含著圓周率,代表可以在背景畫出一個圓並加入指定的顏色
沒有留言:
張貼留言