首页
社区
课程
招聘
[旧帖] 帮忙看看是什么问题?(OpenGL) 0.00雪花
发表于: 2010-11-30 21:25 3413

[旧帖] 帮忙看看是什么问题?(OpenGL) 0.00雪花

2010-11-30 21:25
3413
/* Recursive subdivision of triangle */
// tessellate.c

#ifdef __APPLE__
#include <GLUT/glut.h>
#else
#include <GL/glut.h>
#include <math.h>
#endif

/* initial triangle */

GLfloat v[3][2]={{-1.0, -0.58}, {1.0, -0.58}, {0.0, 1.15}};

int n;
int flag;

void triangle( GLfloat *a, GLfloat *b, GLfloat *c, int type)

/* display one triangle  */
{
    glBegin(GL_POLYGON);
       switch(type)
       {
       case(2):
       case(4):
       case(6):
       case(7):
          glEdgeFlag(GL_FALSE);
       break;
       default:
          glEdgeFlag(GL_TRUE);
       }
       if(flag) glEdgeFlag(GL_TRUE);
       glVertex2fv(a);
       switch(type)
       {
       case(3):
       case(4):
       case(5):
       case(7):
          glEdgeFlag(GL_FALSE);
       break;
       default:
          glEdgeFlag(GL_TRUE);
       }
       if(flag) glEdgeFlag(GL_TRUE);
       glVertex2fv(b);
       switch(type)
       {
       case(1):
       case(5):
       case(6):
       case(7):
          glEdgeFlag(GL_FALSE);
       break;
       default:
          glEdgeFlag(GL_TRUE);
       }
       if(flag) glEdgeFlag(GL_TRUE);
       glVertex2fv(c);
    glEnd();
}

void divide_triangle(GLfloat *a, GLfloat *b, GLfloat *c, int m, int k)
{

/* triangle subdivision using vertex numbers */

    GLfloat v[3][2];
    int j, flag[4];
    if(m>0)
    {
        for(j=0; j<2; j++) v[0][j]=(a[j]+b[j])/2;
        for(j=0; j<2; j++) v[1][j]=(b[j]+c[j])/2;
        for(j=0; j<2; j++) v[2][j]=(a[j]+c[j])/2;
        switch(k)
        {
        case(0):
           flag[0]=3;
           flag[1]=1;
           flag[2]=2;
        break;
        case(1):
           flag[0]=5;
           flag[1]=1;
           flag[2]=6;
        break;
        case(2):
           flag[0]=4;
           flag[1]=6;
           flag[2]=2;
        break;
        case(3):
           flag[0]=3;
           flag[1]=5;
           flag[2]=4;
        break;
        case(4):
           flag[0]=4;
           flag[1]=7;
           flag[2]=4;
        break;
        case(5):
           flag[0]=5;
           flag[1]=5;
           flag[2]=7;
        break;
        case(6):
           flag[0]=7;
           flag[1]=6;
           flag[2]=6;
        break;
        case(7):
           flag[0]=7;
           flag[1]=7;
           flag[2]=7;
        break;
        }
           flag[3]=7;
        divide_triangle(a, v[0], v[2], m-1, flag[0]);
        divide_triangle(v[0], b, v[1], m-1, flag[1]);
        divide_triangle(v[2], v[1], c, m-1, flag[2]);
        divide_triangle(v[0], v[1], v[2], m-1, flag[3]);
    }
    else(triangle(a,b,c, k)); /* draw triangle at end of recursion */
}

void display(void)
{

    glClear(GL_COLOR_BUFFER_BIT);
        divide_triangle(v[0], v[1], v[2], n, 0);
    glFlush();
}

void myinit()
{

    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    gluOrtho2D(-2.0, 2.0, -2.0, 2.0);
    glMatrixMode(GL_MODELVIEW);
    glClearColor (1.0, 1.0, 1.0, 1.0);
    glColor3f(0.0,0.0,0.0);
    glPolygonMode(GL_FRONT, GL_LINE);
}

int
main(int argc, char **argv)
{
    n=atoi(argv[1]);
    flag=atoi(argv[2]);
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB );
    glutInitWindowSize(500, 500);
    glutCreateWindow("Edge Flag Test");
    glutDisplayFunc(display);
    myinit();
    glutMainLoop();
}
//==================================
这个程序是一本OpenGL基础书籍里的附带源码,前面的代码编译通过,运行ok。可这个代码编译通过。运行时会弹出一个调试窗口。我是用vc++2008 命令行编译的:
CL tessellate.c
我不想安装vs2008 ...太大了,我用别人的电脑学...
有谁告诉我怎么解决吗?
如果可以的话告诉我怎么用windbg。谢谢~~~

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (6)
雪    币: 6790
活跃值: (4441)
能力值: (RANK:600 )
在线值:
发帖
回帖
粉丝
2
"弹出一个调试窗口?"
不知道你说得是不是dos窗口
你这个是控制台应用程序,肯定会有个dos窗口
调试应用程序,OD比较好入门,以后再学windbg.
2010-11-30 22:06
0
雪    币: 161
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3

就是这个样子啊。
上传的附件:
2010-11-30 23:23
0
雪    币: 19
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
入口函数应该用winmain吧
2010-12-2 05:01
0
雪    币: 49
活跃值: (29)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
支持楼上的。不错,楼主可以试试楼上说的哦
2010-12-2 12:21
0
雪    币: 245
活跃值: (16)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
程序有bug,或者与运行环境不兼容
2010-12-2 12:31
0
雪    币: 9
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
我觉得函数参数类型传递时有问题把,楼主再仔细看看指针对不!!
2010-12-3 20:57
0
游客
登录 | 注册 方可回帖
返回
//