还是蛮漂亮的。
Linux 的 OpenGL 的开发配置可以参见 这篇文章。还是蛮简单的。开发环境和程序的完成大概用了一下午的时间。不过我现在还不太 OpenGL 和 Mesa、FreeGLUT 之间到底是啥关系。不管了。先用着吧。Arch Linux 下的开发配置非常简单:
源代码如下:
#include <GL/glut.h>
#include <stdlib.h>
#include <math.h>
#define PI 3.1415926
#define R 1
#define r (sqrt(3) / 3 * R)
void redraw()
{
double origin[] = {0.0, 0.0};
double colorMode1[6][3] = { //六角星最外层顶点各自的颜色
{1, 0, 0},
{1, 1, 0},
{0, 1, 0},
{0, 1, 1},
{0, 0, 1},
{1, 0, 1}
};
double colorMode2[6][3] = { // 六角星内层顶点各自的颜色
{1, 0.5, 0},
{0.5, 1, 0},
{0, 1, 0.5},
{0, 0.5, 1},
{0.5, 0, 1},
{1, 0, 0.5}
};
glClear(GL_COLOR_BUFFER_BIT);
int i;
// 把这个凹多边形分解成为六个菱形旋转变换组合而成,通过给每个顶点设定不同的颜色达到颜色渐变的效果
for (i = 0; i < 6; ++i) {
glBegin(GL_POLYGON);
glColor3f(colorMode1[i][0], colorMode1[i][1],
colorMode1[i][2]);
glVertex2d((R * cos(PI / 2 + (i * PI) / 3)),
R * sin(PI / 2 + (i * PI) / 3));
glColor3f(colorMode2[(i + 5) % 6][0],
colorMode2[(i + 5) % 6][1], colorMode2[(i + 5) % 6][2]);
glVertex2d(r * cos(PI / 3 + (i * PI) / 3),
r * sin(PI / 3 + (i * PI) / 3));
glColor3f(1.0f, 1.0f, 1.0f);
glVertex2dv(origin);
glColor3f(colorMode2[i][0], colorMode2[i][1],
colorMode2[i][2]);
glVertex2d(r * cos(2 * PI / 3 + (i * PI) /3),
r * sin(2 * PI / 3 + (i * PI) / 3));
glEnd();
}
glutSwapBuffers();
}
int main (int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE);
int windowHandle = glutCreateWindow("Simple GLUT App");
glutDisplayFunc(redraw);
glutMainLoop();
return 0;
}
编译: