《OpenGL編程基礎》第二章習題1

還沒看第三章,工作需要看了寫紋理看了寫矩陣變換,但是基本看不懂啊,,把活兒交差了先。

做了第二章的第一個習題,通過細分多邊形模擬化緣,哦,是畫圓大笑

代碼及註釋:

#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裏把數據輸出到屏幕或者命令行,今次寫這個習題的時候對頂點值的調試花了挺長時間。。鬱悶,第二章裏關於調試講的很模糊,,,
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章