OPENGL—钻石图案

    xiaoxiao2021-04-13  31

    // 第一个OPENGL程序,绘制钻石图案 #include "StdAfx.h" #include <GL/glut.h> #include <math.h> #include <stdlib.h> #include <stdio.h> #define pi 3.14159265 int n=8; int R=200,CX=250,CY=250; int *point; void initGraph (void) { glClearColor(255,255,255,255); //设置背景颜色为白色 gluOrtho2D(0.0,500,0.0,500);//窗口坐标左下角(0,0), 右上角(500,500) } void drawLine(int x1, int y1, int x2, int y2) { glBegin(GL_LINES); glVertex2d(x1, y1); glVertex2d(x2, y2); glEnd(); glFlush(); } void display(void) { glClear(GL_COLOR_BUFFER_BIT) ; //表明需要清除的缓冲 glColor3f(2.0, 2.0, 0.0) ; for(int i=0;i<2*n-2;i+=2) { for(int j=i+2;j<2*n;j+=2) { drawLine(point[i],point[i+1],point[j],point[j+1]); } } } void main(int argc, char **argv) { float w,wi; glutInit(&argc,argv); //初始化 glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB) ; //设置初始显示模式 glutInitWindowSize(500,500); //设置窗口大小 glutCreateWindow("钻石图案"); //设置窗口名称 initGraph(); //自定义函数 point=(int*)malloc(sizeof(int)*n*2);//申请存储空间 w=2*pi/n; wi=w/2; for(int i=0;i<2*n;i+=2) { point[i]=(int)(CX+R*cos(wi)); point[i+1]=(int)(CY+R*sin(wi)); wi+=w; } glutDisplayFunc(display); //用于注册一个绘图函数,设置一个函数当需要进行画图时就调用这个函数 glutMainLoop(); //进入GLUT事件处理循环,让所有的与“事件”有关的函数调用无限循环 if(point!=NULL) free(point);//释放存储空间 }

    运行结果:

    转载请注明原文地址: https://ju.6miu.com/read-669431.html

    最新回复(0)