sierpinski镂垫程序(OpenGL C++版)

//这是抄写的代码,出处在代码里面著名

//因为初学,只有抄写


#include <iostream>
#include <gl/glut.h>
#include <time.h>
#include <stdlib.h>
void init(){
	glClearColor(1.0, 1.0, 1.0, 1.0);//设置系统状态变量-清屏颜色(白色)
	glColor3f(1.0, 0.0, 0.0);//设置系统状态变量-绘制颜色(红色)

	glMatrixMode(GL_PROJECTION);	
	glLoadIdentity();	//此函数暂时不理解
	gluOrtho2D(0.0, 500.0, 0.0, 500.0);//定义视图
	glMatrixMode(GL_MODELVIEW);	//“在程序设计过程中,往往不能跟踪当前的矩阵模式,
	//所以为了避免这种情况的发生,在比较复杂的程序里,总是要及时切换回模型空间”
	//--2006.2,清华大学出版社,《交互式计算机图形学-基于OpenGl的自顶向下方法》,Edward Angel 著,吴文国 译
}

void display(){
	typedef GLfloat Point2[2];

	Point2 vertices[3] = {{0.0, 0.0}, {250.0, 500.0}, {500.0, 0.0}};
	static Point2 p = {75.0, 50.0};//随机起始点

	int j,k;
	int rand();

	glClear(GL_COLOR_BUFFER_BIT);
	//srand(time(0));
	for(k = 0;k < 5000;k++){
		
		j = rand() % 3;

		//迭代随机起始点为原随机起始点与三角形其中一个定点的中点
		p[0] = (p[0] + vertices[j][0]) / 2;
		p[1] = (p[1] + vertices[j][1]) / 2;

		glBegin(GL_POINTS);
			glVertex2fv(p);
		glEnd();
	}
	glFlush();
}

int main(int argc, char** argv)
{
   glutInit(&argc, argv);//在窗口系统和OpenGl之间建立一种交互方式
   glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB);//单缓存,非索引
									//(按照我的理解,非索引也就是RGB颜色模式)
   glutInitWindowSize (500,500); 
   glutInitWindowPosition (100, 100);
   glutCreateWindow (argv[0]);
   init ();
   glutDisplayFunc(display); 
   //glutReshapeFunc(reshape);
   glutMainLoop();
   return 0;
}

效果图:


你可能感兴趣的:(C++,OpenGL,计算机图形学)