プログラミングで図形ってどうやって書くの?的なことを聞かれたので、それらしいのをやってみました。
OpenGLの準備*1
GLUTを使います。まずはwindows用のGLUTを持ってきます。
Nate Robins - OpenGL - GLUT for Win32
ヘッダファイルを「追加のインクルードディレクトリ」に追加、libファイルを「追加のライブラリディレクトリ」に追加、dllファイルは実行ファイルと同じ場所に置くかSystem32へ。多分これで動くはずです。
シェルピンスキーのギャスケット
#include <glut.h> #include <stdio.h> struct Pos { GLdouble x, y; }; void triangle(int n, Pos a, Pos b, Pos c) { //頂点(a,b,c)を線で結ぶよ! glBegin(GL_LINE_LOOP); glVertex2d(a.x, a.y); glVertex2d(b.x, b.y); glVertex2d(c.x, c.y); glEnd(); if (n < 1) { return; } else { Pos d, e, f; //頂点(a,b,c)の中点を取得 d.x = (a.x + b.x)/2, d.y = (a.y + b.y)/2; e.x = (b.x + c.x)/2, e.y = (b.y + c.y)/2; f.x = (a.x + c.x)/2, f.y = (a.y + c.y)/2; triangle(n-1, a, d, f); triangle(n-1, d, b, e); triangle(n-1, f, e, c); } } void display(void) { Pos a, b, c; //画面中央が(0,0) a.x = -0.9, a.y = -0.9; b.x = 0.0, b.y = 0.9; c.x = 0.9, c.y = -0.9; triangle(5, a, b, c); glFlush();//更新 } int main(int argc, char *argv[]) { glutInit(&argc, argv);//初期化 glutInitDisplayMode(GLUT_RGBA);//表示モード設定 glutCreateWindow("GLTest");//ウィンドウ生成 glClear(GL_COLOR_BUFFER_BIT);//塗りつぶし glutDisplayFunc(display);//描画関数へのポインタ glutMainLoop(); return 0; }
実行結果
再帰で短くかけました。再帰を使ったプログラミングは、楽しいです。
参考サイト
*1:VisualStudioでやってます