亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C > 正文

opengl繪制五星紅旗

2020-01-26 13:24:18
字體:
來源:轉載
供稿:網友

本文實例為大家分享了opengl繪制五星紅旗的具體代碼,供大家參考,具體內容如下

主要儀器設備

VisualStudio C++2015

Windows 10環境
opengl庫

操作步驟

1.五星紅旗的各項參數

1) 旗面為紅色,長方形,長與高之比為3:2。
2) 五星的位置參數:
?為便于確定五星之位置,先將旗面對分為四個相等的長方形,將左上方之長方形上下劃為十等分,左右劃為十五等分。如下圖所示:


?大五角星的中心點,在該長方形上五下五、左五右十之處。其畫法為:以此點為圓心,以三等分為半徑作一圓。在此圓周上,定出五個等距離的點,其一點須位于圓之正上方。然后將此五點中各相隔的兩點相聯,使各成一直線。此五直線所構成之外輪廓線,即為所需之大五角星。五角星之一個角尖正向上方。

?四顆小五角星的中心點,第一點在該長方形上二下八、左十右五之處,第二點在上四下六、左十二右三之處,第三點在上七下三、左十二右三之處,第四點在上九下一、左十右五之處。其畫法為:以以上四點為圓心,各以一等分為半徑,分別作四個圓。在每個圓上各定出五個等距離的點,其中均須各有一點位于大五角星中心點與以上四個圓心的各聯結線上。然后用構成大五角星的同樣方法,構成小五角星。此四顆小五角星均各有一個角尖正對大五角星的中心點。

2.繪制大五角星


因為glut無法根據頂點繪制凹多邊形,我只能將圖形拆解,分步繪制。我采用的方式是將五角星分解為10個三角形,共用五角星中心點作為頂點,這樣就可以使用GL_TRIANGLE_FAN(連接成扇形的三角形系列)幾何圖元類型進行填充。對于每一個五角星,我們必須知道的參數只有兩個,中心點和一個外頂點。

注意到,在連續繪制三角形的過程中,重點是根據A點求得B點坐標或者反之,那么根據正弦定理,我們可以求得b邊的長度,根據BC邊的與x軸的夾角以及36°角,我們可以得到A點的坐標。進而可以得到每一個三角形另外兩點的坐標,一個五角星就繪制完成了。

3.繪制小五角星

小五角星的一個頂點必然在小五角星與大五角星的連線上,確定了這個頂點,就可以按照繪制大五角星的方法來繪制它了。
根據大小五角星中心連線,我們又已知小五角星外接圓半徑,就可以輕易求出頂角的坐標了。

4.窗口尺寸變化時圖形不變形

如果不加入這一部分考慮,在對窗口進行縮放時會發生五星紅旗拉伸、變形的情況。于是增加函數glutReshapeFunc以及glOrtho函數。glutReshapFunc用以指定窗口大小調整是的重繪制函數。glOrtho是創建一個正交平行的視景體。changeSize函數是在窗口大小發生變化時要執行的操作。

代碼如下:

#include "gl/glut.h"#include <math.h>const GLfloat PI = 3.1415926f;//定義圓周率void DrawStar(GLfloat px, GLfloat py, GLfloat vx, GLfloat vy,int flag)//位置以及五角星一個外頂點坐標{ glBegin(GL_TRIANGLE_FAN);//繪制一系列三角形 GLfloat vtx[12], vty[12];//1個中心點,10個頂點,頂點的第一個和最后一個相同,其中奇數下標是外頂點,偶數下標是內頂點 vtx[0] = px;//已知的中心點 vty[0] = py; vtx[1] = vx;//已知的第一個外頂點 vty[1] = vy; GLfloat length1 = sqrt((px - vx)*(px - vx) + (py - vy)*(py - vy));//中心點到外頂點的長度 GLfloat length2 = length1*sin(0.1*PI) / sin(126.0 / 180 * PI); //計算剩下的所有頂點 double init = atan((vty[1] - vty[0]) / (vtx[1] - vtx[0]));//頂點與中心點連線與x軸的角度 if (flag) init = init - PI; for (int i = 2; i < 12; i++) {  init = init - 0.2*PI; if (i % 2 == 0) {//內頂點  vtx[i] = length2*cos(init) + vtx[0];  vty[i] = length2*sin(init) + vty[0]; } else {//外頂點  vtx[i] = length1*cos(init) + vtx[0];  vty[i] = length1*sin(init) + vty[0]; } } for (int i = 0; i < 12; i++) //設置頂點 glVertex3f(vtx[i], vty[i], 0.5); glEnd();}void display(){ glClear(GL_COLOR_BUFFER_BIT);//完成清除窗口的任務 //繪制紅旗 glColor3f(1, 0, 0);//確定繪制物體時使用的顏色:紅色 glBegin(GL_QUADS); glVertex3f(-0.75, 0.5, 0.5);//位于z=0.5平面的矩形 0.5是相對值 glVertex3f(0.75, 0.5, 0.5); glVertex3f(0.75, -0.5, 0.5); glVertex3f(-0.75, -0.5, 0.5); glEnd(); //繪制星星 glColor3f(1.0, 1.0, 0.0);//設置顏色為黃色 GLfloat px[5] = { -1.5 / 3,-0.75 / 3,-0.75 / 5,-0.75 / 5,-0.75 / 3 }; GLfloat py[5] = { 0.25,0.4,0.3,0.15,0.05 }; GLfloat vx[5] = { -1.5 / 3 }; GLfloat vy[5] = {0.4};//五星的中心點和其中指定頂點 //計算其余四星的頂點 for (int i = 1; i < 5; i++) { vx[i] = px[i]-0.05*cos(atan((py[0] - py[i]) / (px[0] - px[i]))); vy[i] = py[i]-0.05*sin(atan((py[0] - py[i]) / (px[0] - px[i]))); } //繪制 DrawStar(px[0], py[0], vx[0], vy[0], 0); DrawStar(px[1], py[1], vx[1], vy[1], 1); DrawStar(px[2], py[2], vx[2], vy[2], 1); DrawStar(px[3], py[3], vx[3], vy[3], 1); DrawStar(px[4], py[4], vx[4], vy[4], 1); glutSwapBuffers();//交換緩沖區}void changeSize(GLsizei w, GLsizei h){ if (h == 0) h = 1; glViewport(0, 0, w, h); glMatrixMode(GL_PROJECTION); glLoadIdentity(); int dis = w < h ? w : h; glViewport(0, 0, dis, dis);  glOrtho(-1.5, 1.5, -1.5, 1.5, -1.5, 1.5); if (w <= h) glOrtho(-1.0, 1.0, 1.0,1.0* h / w, 1.0, -1.0); else glOrtho(-1.0, 1.0 * w / h, 1.0, 1.0, 1.0, -1.0);  glMatrixMode(GL_MODELVIEW); glLoadIdentity();}int main (int argc, char *argv[]){ glutInit(&argc,argv);//對glut函數庫進行初始化 glutInitDisplayMode(GLUT_RGB|GLUT_DOUBLE);//指定glutCreateWindow函數將要創建的窗口顯示模式 RGB模式 雙緩沖 glutInitWindowPosition(10, 10);//指定窗口位置,窗口的一個角相對整個屏幕的位置 glutInitWindowSize(400,400);//指定窗口大小,只是一種提示,有可能被其他窗口覆蓋 glutCreateWindow("Simple GLUT App");//打開設置好的窗口,進入glutMainLoop之前這個窗口不會顯示  glOrtho(1.0, 1.0, 1.0, 1.0, 1.0, -1.0); glutReshapeFunc(changeSize);  //注冊窗口大小改變時回調函數 glClear(GL_COLOR_BUFFER_BIT);//完成清除窗口的任務 glutDisplayFunc(display);//與注冊相關的回調函數,指定當窗口內容需要重繪時要調用的函數 glutMainLoop();//進入GLUT事件處理循環,永遠不會返回  return 0;}

實驗結果:

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产日韩欧美中文| 亚洲天堂色网站| 国产精品久在线观看| 日韩美女激情视频| 欧美最猛性xxxx| 少妇高潮久久77777| 久久久久久国产精品三级玉女聊斋| 欧美激情亚洲激情| 亚洲国内精品在线| 成人黄色免费网站在线观看| 亚洲丁香婷深爱综合| 91中文在线视频| 成人免费淫片aa视频免费| 中文字幕一区日韩电影| 国产日本欧美一区二区三区在线| 亚洲激情视频网站| 欧美日韩在线影院| 日韩电影大片中文字幕| 国产免费一区二区三区在线观看| 欧美性猛交xxxx免费看| 亚洲成人激情在线观看| 中文国产成人精品久久一| 亚洲欧美一区二区激情| 国产在线精品成人一区二区三区| 亚洲毛茸茸少妇高潮呻吟| 欧美激情久久久| 55夜色66夜色国产精品视频| 国产精品久久久久久久久久久久久久| 亚洲精品一区在线观看香蕉| 日韩高清电影免费观看完整版| 91地址最新发布| 97久久伊人激情网| 亚洲欧美日韩国产精品| 亚洲免费视频网站| 久久这里只有精品视频首页| 国产精品自产拍高潮在线观看| 亚洲经典中文字幕| 欧美性生活大片免费观看网址| 成人国产亚洲精品a区天堂华泰| 欧美福利在线观看| 亚洲a级在线播放观看| 亚洲视频综合网| 亚洲一区www| 国产区精品在线观看| 92国产精品久久久久首页| 亚洲精品成人av| 亚洲国产欧美久久| 成人444kkkk在线观看| 色先锋资源久久综合5566| 国模精品视频一区二区| 日韩小视频在线观看| 日韩综合视频在线观看| 亚洲国产欧美自拍| 亚洲免费人成在线视频观看| 麻豆国产精品va在线观看不卡| 97人洗澡人人免费公开视频碰碰碰| 亚洲人午夜色婷婷| 亚洲图片欧洲图片av| 欧美亚洲国产成人精品| 亚洲成年人影院在线| 亚洲福利在线看| 亚洲成人免费在线视频| 亚洲人成电影在线观看天堂色| 97福利一区二区| 亚洲第一区中文99精品| 97久久伊人激情网| 91视频88av| 色综合伊人色综合网| 日韩av电影在线免费播放| 一夜七次郎国产精品亚洲| 亚洲二区中文字幕| 亚洲xxx视频| 91精品在线影院| 91精品国产综合久久香蕉922| 久久精品久久久久久| 久久久久久久久亚洲| 欧美第一黄色网| 国外色69视频在线观看| 亚洲国产成人精品女人久久久| 亚洲精品福利免费在线观看| 国产精品久久久av| 国产精品第一第二| 久久精品国产久精国产一老狼| 国产精品天天狠天天看| 91经典在线视频| 欧美伊久线香蕉线新在线| 欧美精品中文字幕一区| 成人a在线视频| 亚洲欧美日韩在线高清直播| 国产综合视频在线观看| 欧美成人中文字幕在线| 成人黄色在线播放| 日韩在线观看免费高清完整版| 色悠久久久久综合先锋影音下载| 狠狠躁夜夜躁久久躁别揉| 亚洲女人被黑人巨大进入al| 黑人极品videos精品欧美裸| 97色在线视频| 日韩女优人人人人射在线视频| 久久精品国产久精国产一老狼| 这里只有精品丝袜| 亚洲香蕉伊综合在人在线视看| 国产精品视频区| 欧美美女操人视频| 91系列在线观看| 在线成人激情黄色| 美女啪啪无遮挡免费久久网站| 国外成人免费在线播放| 国产精品视频免费观看www| 久久精品91久久久久久再现| 成人国产精品一区二区| 亚洲日本中文字幕| 国产伊人精品在线| 5278欧美一区二区三区| 成人激情av在线| 国产精品美女www| 国产香蕉一区二区三区在线视频| 久久国产加勒比精品无码| 久久久国产精品亚洲一区| 亚洲欧美变态国产另类| 国产伊人精品在线| 久久久免费观看视频| 欧美在线视频一区二区| 欧美性xxxxxx| 国产精品美女主播在线观看纯欲| 日韩av中文字幕在线| 亚洲区在线播放| 色偷偷噜噜噜亚洲男人| 国产精品免费网站| 欧美午夜视频在线观看| 最近2019中文字幕mv免费看| 国产精品高潮在线| 日韩中文字幕av| 精品毛片网大全| 亚洲成人av中文字幕| 国产欧美精品xxxx另类| 久久人体大胆视频| 色黄久久久久久| 亚洲护士老师的毛茸茸最新章节| 青草青草久热精品视频在线网站| 国产在线精品自拍| 在线精品国产成人综合| 亚洲影视九九影院在线观看| 亚洲欧美一区二区三区情侣bbw| 色综合久综合久久综合久鬼88| 国产欧美日韩91| 久久久久久久久久久91| 国产精品91久久| 国产成人鲁鲁免费视频a| 78m国产成人精品视频| 91精品久久久久久| 国产亚洲欧美日韩美女| 日韩av免费在线播放| 成人免费看吃奶视频网站| 亚洲自拍中文字幕| 亚洲国产91色在线| 欧美丰满少妇xxxxx| 亚洲偷欧美偷国内偷| 国产亚洲美女精品久久久| 国产精品一区二区av影院萌芽| 麻豆国产va免费精品高清在线| 亚洲一区二区免费在线| 91中文字幕在线| 日韩av大片在线|