用C++语言改编了一个python版本的艺术画opengl实现,代码与效果如下
感觉用c++绘制速度就是快
#include <math.h>
#include <GL/glut.h>
int W, H, R;
void init() {
glClearColor(1, 1, 1, 1);
}
void drawFunc() {
float r;
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(0, 0, 0);
glBegin(GL_POINTS);
for(float x = -R; x <= R; x += 0.04) {
for(float y = -R; y <= R; y += 0.04) {
r = cos(x) + sin(y);
glColor3f( cos(y * r), cos( x * y * r), sin( x * r) );
glVertex2f(x, y);
}
}
glEnd();
glFlush();
}
void reshape(int w, int h) {
if (h <= 0) h = 1;
glViewport(0, 0, w, h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
if (w <= h)
gluOrtho2D(-R, R, -R * h / w, R * h / w);
else
gluOrtho2D(-R * w / h, R * w / h, -R, R);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}
void keyboard(unsigned char key, int x, int y) {
if (key == 27 || key == 'q')
exit(0);
}
int main(int argc, char **argv) {
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);
glutInitWindowPosition(20, 20);
glutInitWindowSize(W, H);
glutCreateWindow("Artist Drawer");
glutReshapeFunc(reshape);
glutDisplayFunc(drawFunc);
glutKeyboardFunc(keyboard);
W = H = 500;
R = 10;
init();
glutMainLoop();
}