還沒看第三章,工作需要看了寫紋理看了寫矩陣變換,但是基本看不懂啊,,把活兒交差了先。
做了第二章的第一個習題,通過細分多邊形模擬化緣,哦,是畫圓
代碼及註釋:
#include <stdlib.h>
#include <math.h>
#include <stdio.h>
static int n = 4;//多邊形邊數
float a = 0; //多邊形內角?不知道怎麼稱呼這個角。。
float x=0, y=0; //多邊形頂點
float R = 1.0f; //半徑。
static void display(void)
{
glClear(GL_COLOR_BUFFER_BIT);
glBegin(GL_LINE_LOOP);
glColor3f(1.0, 0.0, 0.0);
a = 360/n;
int i;
n=n<3?3:n;//不能畫成一條直線
for(i=1; a*i<=360; ++i)
{ //for循環確定多邊型頂點
x = R*cos(i*a*3.14/180);
y = R*sin(i*a*3.14/180);
glVertex2f(x, y);
}
glEnd();
glLineWidth(10.0);//邊線寬度10像素
glFlush();
}
void myReshape(GLsizei w,GLsizei h){
glViewport(0,0,w,h);
}
static void key(unsigned char key, int x, int y)
{ //這個按鍵處理回調是CodeBox自己創建的自動化代碼,剛好拿來用作多邊形變化
switch (key)
{
case 27 :
case 'q':
exit(0);
break;
case '+':
++n; //增加多邊形邊的數量。
break;
case '-':
--n; //減少邊
break;
}
glutPostRedisplay();
}
/* Program entry point */
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutCreateWindow("Circle");
glClearColor(1.0, 1.0, 1.0, 1.0); //清理顏色,放在這裏可以設置背景顏色。
glutDisplayFunc(display); //加班那些事兒
glutReshapeFunc(myReshape); //加班那些事兒,今次沒在這個函數里加班。。
glutKeyboardFunc(key);
glutMainLoop();
return EXIT_SUCCESS;
}
程序出來後是一個整四邊行,按“+”按鍵,逐漸變成一個圓,逐漸的化緣,慢慢的,就特用它化緣討飯了,
還不清除如何在OpenGL裏把數據輸出到屏幕或者命令行,今次寫這個習題的時候對頂點值的調試花了挺長時間。。鬱悶,第二章裏關於調試講的很模糊,,,