• 6413阅读
  • 1回复

qt+opengl 采用gluTess画任意多边形问题 [复制链接]

上一主题 下一主题
离线pear_2268
 

只看楼主 倒序阅读 楼主  发表于: 2010-04-16
— 本帖被 XChinux 从 General Qt Programming 移动到本区(2011-01-02) —
使用QT4.6.2的windows版本开发一个图形程序,其中在用gluTess函数绘制任意多边形的时候,一旦多边形轮廓点中出现相同点时,程序便出错,相同代码在QT4.6.2的linux版本和vs2008下都可以绘制成功。哪位知道问题的原因或解决方案请赐教。
源码如下:
void COpenGL::my_error(GLenum err)
{
    string str = (char*)(gluErrorString(err));
    cout << str <<endl;
}

void COpenGL::combineCallback(GLdouble coords[3],
                              GLdouble *vertex_data[4],
                              GLfloat weight[4], GLdouble **dataOut)
{
    int* ptr = (int*) malloc(3 * sizeof(int));

    memList.push_back(ptr);

    ptr[0] = (GLint)   coords[0];
    ptr[1] = (GLint)   coords[1];
    ptr[2] = (GLint)   coords[2];

    *dataOut = (GLdouble*)ptr;
}
typedef void (__stdcall *fn)(void);

void COpenGL::drawTess()const
{
    static GLUtriangulatorObj *tobj = NULL;
    if (tobj == NULL)
    {
        tobj = gluNewTess();
    }
    if (NULL != tobj)
    {
        glClear(GL_COLOR_BUFFER_BIT);
        glColor3f(0.7,   0.5,   0.0);

        gluTessCallback(tobj,   GLU_TESS_BEGIN,  (fn)glBegin);
        gluTessCallback(tobj,   GLU_TESS_END,  (fn)glEnd);
        gluTessCallback(tobj,   GLU_TESS_ERROR,  (fn) my_error);
        gluTessCallback(tobj,   GLU_TESS_VERTEX,  (fn) glVertex2iv);
        gluTessCallback(tobj,   GLU_TESS_COMBINE,  (fn) combineCallback);

    }
    GLdouble   data[3];

    gluBeginPolygon(tobj);
    for (int j=0; j<=contours_cnt; ++j)
    {
        int point_cnt = contours[j].point_cnt;
        gluNextContour(tobj,GLU_UNKNOWN);
        for (int i=0; i<point_cnt; ++i)
        {
            data[0] = contours[j].p[0];
            data[1] = contours[j].p[1];
            data[2] = 0;
            gluTessVertex(tobj,data,(void*)contours[j].p);
        }
    }
    gluEndPolygon(tobj);

    for (size_t i=0; i<memList.size(); ++i)
    {
        free(memList);
    }
    memList.clear();
}
离线pear_2268

只看该作者 1楼 发表于: 2010-04-17
自己顶一下啊,另外,使用的IDE是QtCreator。
快速回复
限100 字节
 
上一个 下一个