用OpenGL畫五角星

2021-08-17 11:05:57 字數 2134 閱讀 1991

第一次寫部落格,正在上大二,學的計算機專業,因為課很雜,想把自己學過的東西順便寫下來做個記錄,寫的不好請見諒!

這個學期學的圖形學,主要是講opengl的東西,老師讓我們自己用gl_lines、gl_line_loop、gl_line_strip等方式畫一些自己覺得好看的圖形(由於不是教程文章,就不解釋這些方法的意思和其他基本的東西了),於是理科生的我想了想也就只能想到五角星了。。。

剛開始有兩種思路,一種是確定十個點,分別是五角星的五個凸點和五個凹點,然後用loop方法依次連線,第二種方法是只用找五個凸點,在連線的時候像我們平時手畫五角星那樣連線(假如從最高點為a,依次順時針為b、c、d、e,那麼就按照acebd的順序連線,如下圖),兩種方法我都嘗試過,各有優勢吧。

下面這個是方法一的效果圖:

首先說第一種方法吧,原理很簡單,想象有兩個同心圓,乙個半徑設為r=0.5f,另乙個為r=0.2f,大圓上取五個等差點作為凸點,小圓上取五個點作為凹點,並且每個凸點和對應的凹點(如a與a)x與y座標取負,也就是關於原點對稱。

然後根據r和r求出五個點的座標,如圖:

求點的座標只需要將每個點的角度找到,帶入x=r*cosα、y=r*sinα即可。

首先給出r、r和pi的值:

const glfloat r = 0.5f;

const glfloat r = 0.2f;

const glfloat pi = 3.1415926536f;

為方便,我寫了乙個函式getpoint來計算x和y的值:

glfloat getpointcos(glfloat r, int angle) 

glfloat getpointsin(glfloat r, int angle)

確定了r和角度angle,便可以找到該點的x和y,上圖的b點角度為18°,其他點分別為a 0°,c 54°,d與c關於y軸對稱,e與b關於y軸對稱。而小圓上的點abcde則分別與abcde關於原點對稱,因此:

glfloat pointa[2] = ;

glfloat pointb[2] = ;

glfloat pointc[2] = ;

glfloat pointd[2] = ;

glfloat pointe[2] = ;

glfloat pointa[2] = ;

glfloat pointb[2] = ;

glfloat pointc[2] = ;

glfloat pointd[2] = ;

glfloat pointe[2] = ;

好了,準備工作都做完了,現在就開始連線形成圖形了。

如剛開始說的,我們要將這十個點按照adbecadbec的順序依次連線(這一步如果有疑問可以畫圖看看),使用gl_line_loop的方法,**如下:

glbegin(gl_line_loop);

glvertex2fv(pointa);

glvertex2fv(pointd);

glvertex2fv(pointb);

glvertex2fv(pointe);

glvertex2fv(pointc);

glvertex2fv(pointa);

glvertex2fv(pointd);

glvertex2fv(pointb);

glvertex2fv(pointe);

glvertex2fv(pointc);

glend();

最後別忘了呼叫glflush()函式!!!

接下來的第二種方法就簡單許多了,只需要把abcde五個點去掉,然後在連線階段按照acebd的順序依次連線就完成了,具體**就不再給出了,大家可以自己試試!

OpenGL繪製五角星

include include include gl.h include glut.h 三稜錐的繪製 2016 10 30 vizer pragma comment linker,subsystem windows entry maincrtstartup 隱藏控制台視窗 旋轉引數 static g...

python畫五角星 Python的畫五角星

前言 我們剛學畫畫的時候肯定學過五角星,想必畫個五角星太簡單了,但是python呢?分析 五角星的每乙個角都是相等的,36 外角144 把最左邊的點當做 0,0 實踐 1 前進 import turtle turtle.forward 100 turtle.forward 100 turtle.fo...

turtle畫五角星和大樹

import turtle turtle.setup 2000,2000,0,0 turtle.pensize 20 turtle.pencolor black turtle.seth 0 turtle.fd 400 turtle.seth 144 turtle.fd 400 turtle.seth...