1. 程式人生 > >opengl學習筆記 五 ——繪製複雜圖形

opengl學習筆記 五 ——繪製複雜圖形

               

本小節的程式碼參考了

http://www.cppblog.com/doing5552/archive/2009/01/08/71532.html裡的內容。

1、用正多邊形模擬一個圓,主要思想是求出把圓n等分的各個頂點座標,然後連線即可。第一個頂點的座標為(R,0)。

核心程式碼如下:

#include <math.h>const int n = 20;const GLfloat R = 0.5f
;const GLfloat Pi = 3.1415926536f;void display(void){     int i;     glClear(GL_COLOR_BUFFER_BIT);     glBegin(GL_LINE_LOOP);     for(i=0; i<n; ++i)         glVertex2f(R*cos(2*Pi/n*i), R*sin
(2*Pi/n*i));     glEnd();     glFlush();}

下圖1是n=20的結果。


下圖2是n=200的結果


2、畫一個五角星,效果如下所示


程式碼思路是設正五邊形邊長為1。

圓半徑為R,圓心O為座標原點,

顯然有R=0.5/sin36°;

第一個頂點A的座標為(0,R),

B點的橫座標bx=R*cos18°,縱座標by=R*sin18°

C點的橫座標cx=1/=0.5,縱座標cy=-R*sin54°

DE兩點和BC關於y軸對稱,所以最終的程式碼如下:

#include <math.h>const GLfloat Pi = 3.1415926536f;const GLfloat arc= Pi/180//1度角所對應的弧度void display(void)const GLfloat r = 0.5f/sin(36 * arc) ; GLfloat bx = r * cos(18 * arc); GLfloat by = r * sin(18 * arc); GLfloat cx = 0.5f; GLfloat cy = -r * sin(54 * arc); //各定點座標 GLfloat  A[2] = { 0, r },  B[2] = { bx, by },  C[2] = { cx, cy },  D[2] = { -cx, cy },  E[2] = { -bx, by };  // 按照A->C->E->B->D->A的順序,可以一筆將五角星畫出 glClear(GL_COLOR_BUFFER_BIT); glBegin(GL_LINE_LOOP); glColor3f(1.0, 0.0, 0.0); glVertex2fv(A); glVertex2fv(C); glVertex2fv(E); glVertex2fv(B); glVertex2fv(D); glEnd(); glFlush();}
3、畫正弦函式圖形
程式碼如下:

/*由於OpenGL預設座標值只能從-1到1,(可以修改,但方法留到以後講)所以我們設定一個因子factor,把所有的座標值等比例縮小,這樣就可以畫出更多個正弦週期試修改factor的值,觀察變化情況*/
#include <math.h>const GLfloat factor = 0.1f//縮放因子,將普通正弦函式的影象縮小10倍畫到螢幕上。void display(void){ GLfloat x; glClear(GL_COLOR_BUFFER_BIT); glBegin(GL_LINES); glVertex2f(-1.0f, 0.0f); glVertex2f(1.0f, 0.0f);         // 以上兩個點可以畫x軸 glVertex2f(0.0f, -1.0f); glVertex2f(0.0f, 1.0f);         // 以上兩個點可以畫y軸 glEnd();  //用描點法畫出縮放後的正弦函式影象 glBegin(GL_LINE_STRIP); for(x=-1.0f/factor; x<1.0f/factor; x+=0.01f) {  glVertex2f(x*factor, sin(x)*factor); } glEnd(); glFlush();}
執行結果如下:



           

再分享一下我老師大神的人工智慧教程吧。零基礎!通俗易懂!風趣幽默!還帶黃段子!希望你也加入到我們人工智慧的隊伍中來!https://blog.csdn.net/jiangjunshow