huge king 2019-10-14 20:51 采纳率: 0%
浏览 316
已结题

为什么三维Sierpinski镂垫打不出来?我的程序有什么问题?

#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;

}

  • 写回答

1条回答 默认 最新

  • zqbnqsdsmd 2019-10-14 21:42
    关注
    评论

报告相同问题?

悬赏问题

  • ¥20 怎么在stm32门禁成品上增加记录功能
  • ¥15 Source insight编写代码后使用CCS5.2版本import之后,代码跳到注释行里面
  • ¥50 NT4.0系统 STOP:0X0000007B
  • ¥15 想问一下stata17中这段代码哪里有问题呀
  • ¥15 flink cdc无法实时同步mysql数据
  • ¥100 有人会搭建GPT-J-6B框架吗?有偿
  • ¥15 求差集那个函数有问题,有无佬可以解决
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 解riccati方程组