#include
#include
#include
#include
GLfloat v[4][3] = { {0.0, 0.0, 1.0},
{0.0, 0.942809, -0.33333},
{0.0, 0.942809, -0.33333},
{-0.816497, -0.471405, -0.333333} };/*定义四个向量*/
GLfloat colors[4][3] = { {1.0, 0.0, 0.0}, {0.0, 1.0, 0.0},
{0.0, 0.0, 1.0}, {0.0, 0.0, 0.0} };/*定义红蓝绿黑颜色数组*/
void init(void) {
glClearColor(1.0,1.0,1.0, 0.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glOrtho(-5.0, 5.0, -5.0, 5.0, -5.0, 5.0);
}
void triangle(GLfloat* va, GLfloat* vb, GLfloat* vc)//画三角形
{
glVertex3fv(va);
glVertex3fv(vb);
glVertex3fv(vc);
}
void tetra(GLfloat* a, GLfloat* b, GLfloat* c, GLfloat* d)//画四面体
{
glColor3fv(colors[0]);
triangle(a, b, c);
glColor3fv(colors[1]);
triangle(a, c, d);
glColor3fv(colors[2]);
triangle(a, d, b);
glColor3fv(colors[3]);
triangle(b, d, c);
}
void divide_tetra(GLfloat* a, GLfloat* b, GLfloat* c, GLfloat* d, int m)
{
GLfloat mid[6][3];
int j;
if (m >0)
{
for (j = 0; j < 3; j++) {
mid[0][j] = (a[j] + b[j]) / 2;
mid[1][j] = (a[j] + c[j]) / 2;
mid[2][j] = (a[j] + d[j]) / 2;
mid[3][j] = (b[j] + c[j]) / 2;
mid[4][j] = (c[j] + d[j]) / 2;
mid[5][j] = (b[j] + d[j]) / 2;
}
divide_tetra(a, mid[0], mid[1], mid[2], m - 1);
divide_tetra(mid[0], b, mid[3], mid[5], m - 1);
divide_tetra(mid[1], mid[3], c, mid[4], m - 1);
divide_tetra(mid[2], mid[4], d, mid[5], m - 1);
}
else tetra(a, b, c, d);
}
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt(0, 1, 0, 0, 0, 0, 0, 0, 1);
glBegin(GL_TRIANGLES);
divide_tetra(v[0], v[1], v[2], v[3], 5);
glEnd();
glFlush();
}
void reshape(GLsizei w, GLsizei h) {
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glViewport(0, 0, w, h);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}
int main(int argc, char* argv[]) {
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);
glutInitWindowPosition(100, 100);
glutInitWindowSize(900, 900);
glutCreateWindow("hello openg!");
init();
glutDisplayFunc(display);
glutReshapeFunc(reshape);
glutMainLoop();
return 0;
为什么我的程序打不出三维Sierpinski镂垫,问题在哪?
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
1条回答 默认 最新
悬赏问题
- ¥15 x趋于0时tanx-sinx极限可以拆开算吗
- ¥500 把面具戴到人脸上,请大家贡献智慧
- ¥15 任意一个散点图自己下载其js脚本文件并做成独立的案例页面,不要作在线的,要离线状态。
- ¥15 各位 帮我看看如何写代码,打出来的图形要和如下图呈现的一样,急
- ¥30 c#打开word开启修订并实时显示批注
- ¥15 如何解决ldsc的这条报错/index error
- ¥15 VS2022+WDK驱动开发环境
- ¥30 关于#java#的问题,请各位专家解答!
- ¥30 vue+element根据数据循环生成多个table,如何实现最后一列 平均分合并
- ¥20 pcf8563时钟芯片不启振