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

为什么我的程序打不出三维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
    关注
    评论

报告相同问题?

悬赏问题

  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?