#include <GL/glut.h>
typedef GLfloat point[3];
point v[]={{-1.0, -0.58}, {1.0, -0.58}, {0.0, 1.15}};
int n;
int i,x0,y0;
void triangle(point a, point b, point c)
{
glBegin(GL_POLYGON);
glVertex3fv(a);
glVertex3fv(b);
glVertex3fv(c);
glEnd();
}
void divide_triangle(point a, point b, point c, int m)
{
point v1, v2, v3;
int j;
if(m>0)
{
for(j=0; j<3; j++) v1[j]=(a[j]+b[j])/2;
for(j=0; j<3; j++) v2[j]=(a[j]+c[j])/2;
for(j=0; j<3; j++) v3[j]=(b[j]+c[j])/2;
divide_triangle(a, v1, v2, m-1);
divide_triangle(c, v2, v3, m-1);
divide_triangle(b, v3, v1, m-1);
}
else
triangle(a,b,c);
}
void display(void)
{
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(0.0,1.0,0.0);
divide_triangle(v[0], v[1], v[2], n);
glColor3f(1.0,1.0,0.0);
divide_triangle(v[3], v[2], v[1], n);
glColor3f(0.0,0.0,1.0);
divide_triangle(v[0], v[3], v[1], n);
glColor3f(1.0,0.0,0.0);
divide_triangle(v[0], v[2], v[3], n);
glFlush();
}
void myinit()
{
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(-1.0, 1.0, -1.0, 1.0, -1.0, 1.0);
glMatrixMode(GL_MODELVIEW);
glClearColor (1.0, 1.0, 1.0, 1.0);
glColor3f(0.0,1.0,0.0);
}
void motion(int x,int y)
{
if(y-125*v[0][0]-250>0 && y+1.73*x-125*v[1][1]-216.25*v[1][0]-682.5<0
&& y-1.73*x-125*v[0][1]+216.25*v[0][0]+182.5<0)
{
y = 500-y;
for(int j=0;j<3;j++) v[j][0] = v[j][0]+(x-x0)/125.0;
for(j=0;j<3;j++) v[j][1] = v[j][1]+(y-y0)/125.0;
x0 = x;
y0 = y;
glClearColor (0.0, 1.0, 1.0, 1.0);
display();
}
}
void mouse(int button, int state, int x, int y)
{
if(button == GLUT_RIGHT_BUTTON && state == GLUT_DOWN)
{
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(-2.0-0.5*i, 2.0+0.5*i, -2.0-0.5*i, 2.0+0.5*i, -2.0-0.5*i, 2.0+0.5*i);
glMatrixMode(GL_MODELVIEW);
display();
i = i+1-(i+1)/5*5;
}
if(button == GLUT_LEFT_BUTTON && state == GLUT_DOWN)
{
y = 500-y;
if(y-125*v[0][0]-250>0 && y+1.73*x-125*v[1][1]-216.25*v[1][0]-682.5<0
&& y-1.73*x-125*v[0][1]+216.25*v[0][0]+182.5<0)
{
glColor3f(1.0,0.0,0.0);
glClearColor (1.0, 1.0, 1.0, 1.0);
display();
x0 = x;
y0 = y;
}
}
if(button == GLUT_LEFT_BUTTON && state == GLUT_UP)
{
y = 500-y;
glColor3f(0.5,1.0,0.5);
glClearColor (1.0, 1.0, 1.0,1.0);
display();
}
}
void KeyBoardCB(unsigned char key, int x, int y)
{
if(key == 27)
exit(0);
}
int main(int argc, char **argv)
{
n=4;
i=1;
x0 = 0;
y0=0;
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);
glutInitWindowSize(500, 500);
glutCreateWindow("计算机图形学实验");
glutDisplayFunc(display);
myinit();
glutMouseFunc(mouse);
glutMotionFunc(motion);
glutKeyboardFunc( KeyBoardCB );
glutMainLoop();
return 0;
}
one.rar_正四面体程序
版权申诉
172 浏览量
2022-09-24
15:12:53
上传
评论
收藏 211KB RAR 举报
小贝德罗
- 粉丝: 70
- 资源: 1万+
最新资源
- 测试aaaaaaabbbbb
- VID20240521070643.mp4
- Android系统原理与开发学习要点详解-培训课件.zip
- 部署yolov8的tensorrt模型支持检测分割姿态估计的C++源码+部署步骤.zip
- 以简单、易用、高性能为目标、开源的时序数据库,支持Linux及Windows, Time Series Database.zip
- python-leetcode面试题解之第198题打家劫舍-题解.zip
- python-leetcode面试题解之第191题位1的个数-题解.zip
- python-leetcode面试题解之第186题反转字符串中的单词II-题解.zip
- 一个基于python的web后端高性能开发框架,下载可用
- python-leetcode面试题解之第179题最大数-题解.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈