opengl學習小筆記(2)使用OpenGL繪製巢狀旋轉六邊形
介個是我們的第一個實驗,對於一個對於OPENGL還有些迷糊的我們也只好認命了,好在網上也各種資源在那裡,老師也給了大的框架了!
實驗要求的最終結果:
原始碼:
#include<GL/glut.h>
#include<stdio.h>
#include<math.h>
void PlotRegularHexagon(void) //正六邊形繪製子影象
{
const GLfloat pi=3.14159;
//定義最大半徑
float a=300;
//初始放置角度
float rotAngle=0;
glClear(GL_COLOR_BUFFER_BIT);
GLint n=30;
for(int i=0;i<n;i++)
{
float p1[]={a*cos(rotAngle),a*sin(rotAngle)};
float p2[]={a*cos(rotAngle+pi/3),a*sin(rotAngle+pi/3)};
float p3[]={a*cos(rotAngle+2*pi/3),a*sin(rotAngle+2*pi/3)};
float p4[]={a*cos(rotAngle+pi),a*sin(rotAngle+pi)};
float p5[]={a*cos(rotAngle+4*pi/3),a*sin(rotAngle+4*pi/3)};
float p6[]={a*cos(rotAngle+5*pi/3),a*sin(rotAngle+5*pi/3)};
rotAngle=rotAngle+pi/6;
a=a*cos(pi/6);
if(i%3==1)
glColor3f(1.0f,0.0f,0.0f);
else if(i%3==2)
glColor3f(0.0f,1.0f,0.0f);
else
glColor3f(0.0f,0.0f,1.0f);
glBegin(GL_LINE_LOOP);
glVertex2fv(p1);
glVertex2fv(p2);
glVertex2fv(p3);
glVertex2fv(p4);
glVertex2fv(p5);
glVertex2fv(p6);
glEnd();
}
glFlush();
}
int main()
{
glutInitWindowSize(600,600);
glutInitWindowPosition(-100,-200);
glutCreateWindow("XXXXXXXX");
glClearColor(1.0,1.0,1.0,0.0);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(-300,300,-300,300);
glutDisplayFunc(PlotRegularHexagon);
glutMainLoop();
return 0;
}
嗯,這個實驗中最很需要的就應該是關於這六個頂點的定位了。
首先畫一個正六邊形,然後根據不同半徑繪製同一圓心的一系列正六邊形,最後想辦法改變角度。
畫出正六邊形(中心到角點的距離 a = 300)初始角度為0 度。
確定第一個六邊形的座標位置P1~P6,然後進行第二個內切六邊形的畫圖,關於它的座標和每次旋轉角度間的關係了,附圖說明一下:
其他的嘛也沒有什麼太特別的,按照同樣的方法重複便可得到所要圖形啦。
裡面有各種問題有解答!
OPENGL真的是不錯的喲!